gpt4 book ai didi

c# - 图像到内存慢

转载 作者:行者123 更新时间:2023-11-30 18:35:01 26 4
gpt4 key购买 nike

我主要想听听建议..

我的程序在屏幕上显示多个大图像..每个在 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 Crystal 般清晰的图像。

我想 MemoryStream 可能会出来,但我将其添加为一种测试..

最佳答案

只是一个猜测,但将所有潜在的优化留给 WPF 并仅通过其 URI 加载图像可能不是“最佳”解决方案:

using (DrawingContext dc = ActiveImage.imageDV.RenderOpen())
{
var bitmap = new BitmapImage(new Uri(ActiveImage.imagePath));
// alternatively, if it is a relative path
// var bitmap = new BitmapImage(new Uri(ActiveImage.imagePath, UriKind.Relative));

dc.DrawImage(bitmap, new Rect(ActiveImage.position, ActiveImage.size));
}

关于c# - 图像到内存慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15593510/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com