主にアドバイスをお願いします。
私のプログラムは、画面に複数の大きな画像を表示します。それぞれ1〜4 mbsです。150DPI、解像度6000x4000、深さ24ビット。
私は私に小さな画像を与える他の多くの設定を持っています..しかし私は高品質の画像が必要です..
わかりました、それで遅いです..しかしそれほど遅くはありません...唯一の本当に悪い部分は私が1つの画像から別の画像に切り替えるときです..
つまり、基本的に、画像ごとに2つの画像があります。1つの親指と1つのHQ ..ユーザーが画像にズームインすると、HQをロードし、ユーザーがズームアウトすると、親指の画像に切り替わります。
その切り替えポイントで、ユーザーはHQイメージがメモリにロードされて画面に描画されるまで約4〜8秒待つ必要があります。
以下は、HQイメージをロードするときに使用するコードです。
using (DrawingContext dc = ActiveImage.imageDV.RenderOpen())
{
FileStream fs = new FileStream(ActiveImage.imagePath, FileMode.Open, FileAccess.Read, FileShare.Read);
MemoryStream ms = new MemoryStream();
fs.CopyTo(ms);
ms.Seek(0, SeekOrigin.Begin);
fs.Close();
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.CreateOptions = BitmapCreateOptions.DelayCreation;
bitmap.StreamSource = ms;
bitmap.EndInit();
//bitmap.Freeze();
dc.DrawImage(bitmap, new Rect(ActiveImage.position, ActiveImage.size));
}
以下は、Thumb画像をロードするときに使用するコードです
using (DrawingContext dc = ActiveImage.imageDV.RenderOpen())
{
FileStream fs = new FileStream(ActiveImage.thumbPath, FileMode.Open, FileAccess.Read, FileShare.Read);
MemoryStream ms = new MemoryStream();
fs.CopyTo(ms);
ms.Seek(0, SeekOrigin.Begin);
fs.Close();
BitmapImage bitmap = new BitmapImage();
RenderOptions.SetBitmapScalingMode(bitmap, BitmapScalingMode.NearestNeighbor);
bitmap.BeginInit();
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.CreateOptions = BitmapCreateOptions.DelayCreation;
bitmap.StreamSource = ms;
bitmap.EndInit();
//bitmap.Freeze();
dc.DrawImage(bitmap, new Rect(ActiveImage.position, ActiveImage.size));
}
これを最適化する方法はありますか?もっと良い方法はありますか?ユーザーが単一の画像を見ている場合にのみ、HQの透明な画像が必要であることを忘れないでください。
MemoryStreamが出てくると思いますが、一種のテストとして追加しました。