无法将 byte[] 转换为 BitmapImage

Can't convert byte[] to BitmapImage

我有从移动应用程序拍摄的图像,我需要将其转换为 BitmapImage。所有拍摄的图像都转换为 byte[] 并存储在 SQL 服务器中。

然后我想检索该图像并将其显示在 WPF 的 Image 控件中。这是我从 byte[] 到 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() 行收到如上所示的错误。

No imaging component suitable to complete this operation was found.

我调用 LoadImage() 方法,如下所示:

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

我知道 byte[] image.TruckImg 包含有效图像,因为当我将完全相同的图像附加到电子邮件时,图像会正确显示在 Gmail 中。

邮件附件代码:

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

谁能告诉我如何解决上面的错误?我需要为我的 BitmapImage 设置特定的 headers 吗?如果我这样做了,那么当我收到邮寄的图片时,完全相同的 byte[] image.TruckImg 如何才能在 Gmail 中正确显示...

提前致谢! :)

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