2

我正在创建一个应用程序,如果图像是,我需要在按钮上更改图像的来源click.eg

样品1.png,样品2.png,样品3.png ...

我在按钮单击时编写了此代码:

int count=1;
imagename.Source=new BitmapImage(new uri("/sample"+count+".png",uriKind.Relative));

但问题是当我在设备上运行应用程序时,每次单击按钮时都需要一些时间来加载图像源,而在模拟器上它会正确更改。有没有办法减少设备上的加载时间?

4

3 回答 3

3

有什么方法可以减少设备上的加载时间?

据我所知:没有。如果性能不令人满意,您可能需要尝试一些缓存。基本上,不是每次都创建一个新的 BitmapImage,而是重新使用旧的。

首先,预加载位图。不要忘记设置CreateOptions属性,否则在将图片分配给实际的 Image 控件之前不会加载图片:

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 时间和内存使用之间的折衷。

于 2013-09-17T13:06:34.203 回答
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。

于 2013-09-17T13:23:29.573 回答
0
int count=1;

位图图像 bmp=新位图图像();

StorageFile sFile = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(@"Assets\Images\img" + count + ".png");

        var fileStream = await sFile.OpenReadAsync();

           await bmp.SetSourceAsync(fileStream);
于 2014-01-18T19:42:02.153 回答