C# 从字节加载图像会导致AG_E_网络错误
我正在为我们的Silverlight应用程序编写自己的缓存,以解决任何大小问题。 缓存工作正常,但是,它不适用于图像。 我把问题缩小到一个小测试应用程序,它将BitmapImage转换为字节(模拟从缓存中读取),然后将这些字节转换回图像 代码如下:C# 从字节加载图像会导致AG_E_网络错误,c#,silverlight,bitmap,C#,Silverlight,Bitmap,我正在为我们的Silverlight应用程序编写自己的缓存,以解决任何大小问题。 缓存工作正常,但是,它不适用于图像。 我把问题缩小到一个小测试应用程序,它将BitmapImage转换为字节(模拟从缓存中读取),然后将这些字节转换回图像 代码如下: public MainPage() { InitializeComponent(); firstImage.ImageOpened += first_Loaded; } void first_Loaded(object sender
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);
}
ImageFailed事件始终以消息“AG_E_NETWORK_ERROR”引发
我读了一些关于这个问题的文章,似乎与图像的来源不同有关,但我肯定能够从内存中的字节加载图像,对吗
有什么办法可以解决这个问题吗
我应该补充一点,转换为字节的工作正常,因为如果我将这些字节保存到磁盘,我可以打开图像。来自Silverlight中的备注: BitmapImage可用于引用JPEG和PNG格式中的图像 文件格式 不幸的是,您使用的
位图编码器
类似乎以BMP格式编码位图。因此,BitmapImage
无法解码编码的缓冲区
您必须找到BitmapEncoder的另一个实现,它能够对JPEG或PNG进行编码。该
BitmapEncoder
类来自何处?好了,Silverlight中没有类似的东西。不过,这是因为保存位起作用,我在尝试读取字节时出错。谢谢欢迎对编码器提出任何建议。