无法将byte []转换为BitmapImage

时间:2016-08-19 08:15:44

标签: c# wpf image bitmap bytearray

我从移动应用中获取了需要转换为BitmapImage的图片。所有拍摄的图像都转换为byte[]并存储在SQL Server中。

然后,我想要检索该图像并将其显示在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()行收到错误,如上所示。

  

没有找到适合完成此操作的成像组件。

我调用LoadImage()方法并且像这样:

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

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

电子邮件附件代码:

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

有谁能告诉我如何解决上面的错误?我是否需要为我的BitmapImage设置特定标头才能工作?如果我这样做,那么当我收到邮寄的图片时,如何在Gmail中正确显示相同的字节[] image.TruckImg ......

提前致谢! :)

1 个答案:

答案 0 :(得分:0)

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