无法将字节[]转换为BitmapImage

问题描述:

我从移动应用拍摄的图像需要转换为BitmapImage。所有拍摄的图像都被转换为byte[]并存储在SQL Server中。无法将字节[]转换为BitmapImage

然后我想要检索该图像并将其显示在WPF中的Image控件中。这是我的转化率从字节[]到的BitmapImage:

private static BitmapImage LoadImage(byte[] imageData) 
{ 
    if (imageData == null || imageData.Length == 0) return null; 
    var image = new BitmapImage(); 
    using (var mem = new MemoryStream(imageData)) 
    { 
     mem.Position = 0; 
     image.BeginInit(); 
     image.CreateOptions = BitmapCreateOptions.PreservePixelFormat; 
     image.CacheOption = BitmapCacheOption.OnLoad; 
     image.UriSource = null; 
     image.StreamSource = mem; 
     image.EndInit(); //Error exception here. 
    } 
    image.Freeze(); 
    return image; 
} 

我在EndInit()线收到错误,如上所示。

未发现适合完成此操作的成像组件。

我称之为LoadImage()方法是这样的:

MyCollection.Add(new ImageItems 
{ 
    Id = image.Id, 
    ImageData = LoadImage(image.TruckImg), 
    DateTaken = image.DateTaken 
}); 

的事情是我知道的byte []​​包含一个有效的图像,因为当我附上完全相同的图像的电子邮件时,图像正确显示在Gmail中。

电子邮件附件代码:

MemoryStream memoryStream = new MemoryStream(image.TruckImg); 
mail.Attachments.Add(new Attachment(memoryStream, filename, MediaTypeNames.Image.Jpeg)); 

谁能告诉我如何解决我上面的错误?我是否需要为我的BitmapImage设置特定的标题才能使用?如果我这样做,那么当我收到邮寄图像时,如何才能在Gmail中正确显示完全相同的字节[]​​...

在此先感谢! :)

+0

错误消息“找不到适合于完成此操作的映像组件”是一个清楚的指示,表示该字节数组不支持有效的编码图像缓冲区,即没有JPEG,PNG等。 – Clemens

+0

感谢您的评论。我不明白,我可以发送完全相同的字节[]作为我自己的电子邮件附件,并且它在我的浏览器中正确显示为.jpg图像。 – CareTaker22

+0

是的,它被添加到我上面的转换代码中:'image.CreateOptions = BitmapCreateOptions.PreservePixelFormat;' – CareTaker22

我想通过电子邮件发送byte[]作为字符串。以某种方式将整个字符串从数据库中复制到剪贴板并通过电子邮件发送它会破坏图像。希望这能帮助那些和我一样犯下同样简单错误的人! :P