【问题标题】:Slideshow in Windows PhoneWindows Phone 中的幻灯片放映
【发布时间】:2012-03-08 19:14:39
【问题描述】:

我有一个 url 数组。每个 url 包含一个图像。我需要一一下载并开始幻灯片放映。我尝试使用循环下载每个文件并显示它们。但是,每当我试图获取以前的图像时,我什么都得不到。

我的代码如下所示

string [] urlArray;
int currentItem;
int totalItems;
private void StartSlideShow()
{
    for(int i=0;i < totalItems;i++)
    {
        DownloadImage(urlArray[i]);
    }
}

private void DownloadImage(string url)
{
    WebClient wc=new WebClient();
    wc.OpenReadCompleted+=new OpenReadCompletedEventHandler(wc_OpenReadCompleted);
    wc.OpenReadAsync(new Uri(url));
}

private void wc_OpenReadCompleted(object sender,OpenReadCompletedEventArgs e)
{
    BitmapImage bi=new BitmapImage();
    bi.SetSource(e.Result);
    imgThumbnail.Source=bi;
}

private void btnNext_Click(object sender, RoutedEventArgs e)
{
    if (currentItem < totalItems)
    {
        DownloadImage(urlArray[currentItem+1]);
        currentItem++;
    }
}
private void btnBack_Click(object sender, RoutedEventArgs e)
{
    if (currentItem > 1)
    {
        DownloadImage(urlArray[currentItem-1]);
        currentItem--;
    }
}

然后我尝试先下载所有图像并保存到 BitmapImage 数组中,并在完成下载后尝试开始幻灯片放映。在这种情况下不显示任何内容。

代码是

private void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
        bi.SetSource(e.Result);
        biArr[currentItem].SetSource(e.Result);
    if(currentItem==totalItems])
        ShowSlides(biArr);
}

private void ShowSlides(BitmapImage[] biArr)
{
    for(int i=0;i < totalItems;i++)
    {
        imgThumbnail.Source=biArr[i];
        System.Threading.Thread.Sleep(5000);
    }
}

然后我尝试将图像转换为 byteArray 并将其保存到名为 BMPList 的列表中。 (列表 BMPList)。完成下载后,当我尝试显示图像时,只有黑色显示为图像

代码是

private void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    BitmapImage bi = new BitmapImage();
    bi.SetSource(e.Result);
    using (MemoryStream ms = new MemoryStream())
    {
        WriteableBitmap btmMap = new WriteableBitmap(bi.PixelWidth, bi.PixelHeight);
        System.Windows.Media.Imaging.Extensions.SaveJpeg(btmMap, ms, bi.PixelWidth, bi.PixelHeight, 0, 100);
        BMPList.Add(ms.ToArray());
    }
    if(currentItem == totalItems)
        ShowSlides(BMPList);
}

private void ShowSlides(List<byte[]> BMPList)
{
    for(int i=0; i < BMPList.Count;i++)
    {
        if (BMPList[currentDisplayItem] != null)
        {
            MemoryStream ms = new MemoryStream(BMPList[i], 0, BMPList[i].Length);
            ms.Write(BMPList[i], 0, BMPList[i].Length);

            BitmapImage img = new BitmapImage();
            img.SetSource(ms);
            imgThumbnail.Source = img;
        }
                System.Threading.Thread.Sleep(5000);
    }
}

如何下​​载所有图像并开始幻灯片放映?

【问题讨论】:

标签: windows-phone-7 windows-phone-7.1


【解决方案1】:

您应该不需要自己下载图像,只需将ImageSource 指向Uri。

有关在处理大量基于 Web 的图像时避免内存问题的详细信息,另请参阅 http://blogs.msdn.com/b/swick/archive/2011/04/07/image-tips-for-windows-phone-7.aspx

【讨论】:

  • 感谢您的回复。如果只有一张图像正在加载,它可以正常工作。但是当我尝试加载多个项目(使用循环)时,什么也没发生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多