【发布时间】:2020-01-12 11:03:04
【问题描述】:
我需要在控件中显示高分辨率图像的预览缩略图以供用户选择。我目前使用ImageListView 加载图像。 这适用于低到中等分辨率的图像。但是当显示非常高分辨率图像的缩略图时,会出现明显的延迟。示例图像可以从https://drive.google.com/open?id=1Qgu_aVXBiMlbHluJFU4fBvmFC45-E81C下载
图像大小约为 5000x3000 像素,大小约为 12 MB。使用此图像的 1000 个副本可以复制该问题。
问题截屏在这里上传
https://giphy.com/gifs/ZEH3T3JTfN42OL3J1A
图片是使用后台工作者加载的
foreach (var f in filepaths)
{
imageListView1.Items.Add(f);
}
1.为了解决这个问题,我尝试调整大分辨率图像的大小并将调整后的图像添加到 ImageListView ...但是调整大小需要大量时间并且缩略图生成速度很慢。
Bitmap x = UpdatedResizeImage2(new Bitmap(f), new Size(1000, 1000));
string q = Path.GetTempPath() + Path.GetFileName(f);
x.Save(Path.GetTempPath() + Path.GetFileName(f));
x.Dispose();
imageListView1.Items.Add(Path.GetTempPath() + Path.GetFileName(f));
2.我也试过Image.CreateThumbnail的方法,但是也很慢。
有没有更好的方法来解决这个问题?
【问题讨论】:
-
首先,1000x1000 不是缩略图大小。我会选择更小的,例如 64x64 甚至 128x128 像素。接下来,您需要在用户开始滚动之前预加载缩略图。此外,您可以预期列表视图中的这么多图像会有一些滞后,当您滚动浏览一个装满照片的文件夹时,甚至可以在 Google Drive 上看到相同的行为,它们加载速度很慢并且有一些延迟
-
@Jon 我也尝试过使用较小的尺寸...有些延迟是可以接受的...但是如果您看到屏幕截图,您会发现延迟太多并且缩略图没有生成线性时尚。
-
您的缩略图每个为 1MB (1000 x 1000)。您需要将它们做得更小,而 Bitmap 可能不会尝试使用 JPG 或 PNG 来使它们更小。
-
@Jon 调整大小的过程是需要时间的。不是图像填充。
-
您是否考虑过提前生成和存储缩略图?
标签: c# .net winforms system.drawing