2

Imageコントロールを使用して大きな画像 (~8000x8000 ピクセル) を表示するアプリケーションがあります。次のように、イメージ コントロールを ImageSource にバインドしています。

<Image x:Name="_ImageSource" Source="{Binding ViewModel.Image, Mode=OneWay}" RenderOptions.BitmapScalingMode="Linear"/>

私は Leadtools 画像ライブラリを使用して、WritableBitmap である ImageSource を作成しています。

this.Image = RasterImageConverter.ConvertToSource(displayImage, ConvertToSourceOptions.None) as BitmapSource;

すべてが機能しますが、ViewModel で Image プロパティが設定されてから、Image コントロールが実際に表示を更新するまでにかなりの遅延があります (大きな画像の場合は 10 秒程度)。私はいくつかのプロファイリング/ロギングを行いましたが、それが の呼び出しではないことを知っていますRasterImageConverter.ConvertToSource()。代わりに、Image コントロール自体が行っていることのようです。

これまでのところ、この遅延の原因について多くを知ることができませんでした. 少なくとも、コントロールが実際に更新されたときに通知を受け取れるようにしたいので、ある種のビジー通知を表示できますが、適切なタイミングで発生するイベントはないようです。

任意のアイデアや支援をいただければ幸いです。

4

1 に答える 1

1

8000x8000 ピクセルの画像を表示するには、ほとんどのコンピューターで 1 ~ 2 秒かかるはずですが、落とし穴があります。このような画像は最大 0.25 ギガバイトのメモリを使用し、通常、LEADTOOLS RasterImage と WPF BitmapSource の間の変換のために、その 2 倍の量の空き RAM が必要になります。
これは、空き連続メモリが十分にない限り、画像をタイルに分割することを検討できることを意味します。または、全体を表示したい場合は、サイズを変更することを検討してください。ズームしないと全体を表示できないモニターはありません。これの一部は、コメントでの Ike の提案に似ています。

同様の画像を表示する小さなテスト プロジェクトと、テストに関する詳細がここにあります: http://support.leadtools.com/SupportPortal/CS/forums/45002/ShowPost.aspx

于 2015-11-20T02:35:49.717 に答える