Windows手机应用中的图像加载时间

时间:2013-09-17 12:58:31

标签: c# xaml windows-phone

我创建了一个应用,如果图像是:

,我需要在按钮click.eg上更改图像的来源
  

sample1.png,sample2.png,sample3.png ...

我已经按下按钮点击了这段代码:

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

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

3 个答案:

答案 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);