如何将Image类型转换为BitmapImage类型?

7

有人知道如何从图像创建一个BitmapImage吗?这是我正在使用的代码:

MemoryStream memStream = new MemoryStream(bytes);
Image img = Image.FromStream(memStream);

现在我可以在内存中访问这个图像。问题是,为了在我的解决方案中使用它,我需要将其转换为BitmapImage类型。

注意:我需要将它转换为BitmapImage类型而不是Bitmap类型。我一直无法弄清楚如何做到这一点,因为类型BitmapImage需要一个Uri作为构造函数。

4个回答

7
Bitmap      img   = (Bitmap) Image.FromStream(memStream);
BitmapImage bmImg = new BitmapImage();

using (MemoryStream memStream2 = new MemoryStream()) 
{
   img.Save(memStream2, System.Drawing.Imaging.ImageFormat.Png);
   memStream2.Position = 0;

   bmImg.BeginInit();
   bmImg.CacheOption = BitmapCacheOption.OnLoad;
   bmImg.UriSource = null;
   bmImg.StreamSource = memStream2;
   bmImg.EndInit();
}

你的代码也完美运行。但出于某种原因,我通过此代码运行的一半图像正常显示,而另一半则像运行Bala的代码时一样呈负片效果。你有什么想法,为什么会发生这种情况? - Edward
很酷。我会看看是不是我的代码的问题。另外,25张图片中有3张还没有显示,但它们的属性仍然显示,比如高度和宽度。这是内存问题吗? - Edward
这并不一定像是内存问题。 - Mark Cidade

4

From this post

public BitmapImage ImageFromBuffer(Byte[] bytes)
{
    MemoryStream stream = new MemoryStream(bytes);
    BitmapImage image = new BitmapImage();
    image.BeginInit();
    image.StreamSource = stream;
    image.EndInit();
    return image;
}

你的代码完美运行。但是由于某种原因,我通过这个代码运行的一半图片正常显示,另一半则显示为负片。有什么想法吗? - Edward
@loyalpenguin 抱歉,我不知道为什么一半的图像会变成负片。 - Bala R

1

0
在内存中创建的图像无法保存到内存流中。因此,我对已有的答案进行了改进,具体如下:
ImageConverter converter = new ImageConverter();
byte[] buffer = (byte[])converter.ConvertTo(image, typeof(byte[]));

MemoryStream loadStream = new MemoryStream(buffer);

BitmapImage returnValue = new();
returnValue.BeginInit();
returnValue.StreamSource = loadStream;
returnValue.EndInit();
return returnValue;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接