我创建了一个应用,如果图像是:
,我需要在按钮click.eg
上更改图像的来源
sample1.png,sample2.png,sample3.png ...
我已经按下按钮点击了这段代码:
int count=1;
imagename.Source=new BitmapImage(new uri("/sample"+count+".png",uriKind.Relative));
但问题是当我在设备上运行应用程序时,每次单击按钮时都需要一些时间来加载图像源,而在模拟器上它会正常更改。有没有办法减少设备上的加载时间? / p>
答案 0 :(得分:3)
有没有办法减少设备上的加载时间?
据我所知:不。如果性能不令人满意,您可能需要尝试一些缓存。基本上,不是每次都创建一个新的BitmapImage,而是重用旧的BitmapImage。
首先,预加载位图。不要忘记设置CreateOptions
属性,否则在将图片指定给实际的图像控件之前不会加载图片:
var bitmaps = new List<BitmapImage>(count);
for (int i = 0; i < count; i++)
{
var bitmap = new BitmapImage(new uri("/sample" + i + ".png",uriKind.Relative));
bitmap.CreateOptions = BitmapCreateOptions.None;
bitmaps.Add(bitmap);
}
然后,根据需要重新使用它们:
imagename.Source = bitmaps[1];
请注意,它会增加您应用的内存使用量,因此不要使用大图片。性能通常是CPU时间和内存使用之间的折衷。
答案 1 :(得分:1)
就像KooKiz所说你可以预取图像但强制加载图像,我相信你需要使用SetSourceAsync,这里有一个例子:
StorageFile file= await StorageFile.GetFileFromApplicationUriAsync(new Uri("appx-data:////sample" + i + ".png"));
using (var stream = await file.OpenReadAsync())
{
bitmap.SetSourceAsync(stream);
}
另外,可以做的是首先预先加载图像的缩略图版本(例如,使用file.GetThumbnailAsync
),然后使用完整图像。
最后,如果您加载的图像实际上大于要加载的图像的分辨率,则可以在Bitmap对象上设置的另一个参数是DecodePixelHeight和DecodePixelWidth。
答案 2 :(得分:0)
int count=1;
BitmapImage bmp = new BitmapImage();
StorageFile sFile =等待Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(@&#34; Assets \ Images \ img&#34; + count +&#34; .png&#34;);
var fileStream = await sFile.OpenReadAsync();
await bmp.SetSourceAsync(fileStream);