从字节加载图像给出了AG_E_NETWORK_ERROR

时间:2014-04-24 16:20:26

标签: c# silverlight bitmap

我为Silverlight应用程序编写自己的缓存以解决任何大小问题。 缓存工作正常,但它不适用于图像。 我把问题缩小到一个小的测试应用程序,它将BitmapImage转换为字节(模拟从缓存中读取它们),然后将这些字节转换回图像。

以下是代码:

public MainPage()
{
    InitializeComponent();
    firstImage.ImageOpened += first_Loaded;
}

void first_Loaded(object sender, RoutedEventArgs e)
{
    var bmp = firstImage.Source;
    var bytes = ToByteArray(bmp as BitmapImage);
    otherImage.Source = CreateImageFromBytes(bytes);
}



private byte[] ToByteArray(BitmapImage bi)
{
    var enc = new BitmapEncoder(bi);
    return enc.GetBitmapData();
}

private BitmapImage CreateImageFromBytes(byte[] data)
{
    var bitmapImage = new BitmapImage();
    bitmapImage.ImageFailed += bitmapImage_ImageFailed;
    var ms = new MemoryStream(data);
    bitmapImage.SetSource(ms);
    return bitmapImage;
}

void bitmapImage_ImageFailed(object sender, ExceptionRoutedEventArgs e)
{
    Console.WriteLine(e.ErrorException.Message);
}

始终使用消息" AG_E_NETWORK_ERROR"引发ImageFailed事件。 我已经阅读了一些关于这个问题的内容,它似乎与图像的来源有所不同,但我肯定能够从内存中的字节加载图像吗?

任何想法如何解决这个问题?

我应该补充一点,转换为字节的工作正常,因为如果我将这些字节保存到磁盘,我可以打开图像。

1 个答案:

答案 0 :(得分:2)

来自Silverlight中的备注BitmapImage page on MSDN

  

BitmapImage可用于参考JPEG和PNG中的图像   文件格式。

不幸的是,您使用的BitmapEncoder类似乎以BMP格式编码位图。因此,BitmapImage无法解码编码缓冲区。

你必须找到一个BitmapEncoder的另一个实现,它能够编码JPEG或PNG。