我主要想建议..
我的程序在屏幕上显示多个大图像。每个图像在 1-4 mbs 之间。150 DPI,6000x4000 分辨率,24 位深度。
我有许多其他设置可以给我较小的图像..但我需要高质量的图像..
好的,所以它很慢......但不是那么慢......唯一真正糟糕的部分是当我从一张图像切换到另一张图像时......
所以,我基本上每个图像都有 2 个图像.. 1 个拇指和 1 个 HQ.. 当用户放大图像时,我加载 HQ,当用户缩小时,它切换到拇指图像..
就在那个切换点,用户必须等待大约 4-8 秒才能将 HQ 图像加载到内存中并绘制到屏幕上。
下面是我在加载 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 可能会出来,但我补充说这是一种测试..