在C#中,如果你有一个包含图片数据的byte[]数组(例如从文件读取、网络传输或Imencode方法获得),你可以使用System.Drawing命名空间中的Bitmap类或者System.Drawing.Common包中的Image.FromStream方法将其转换为一个图片对象。这里有两种常见的方法来实现这个转换:

使用MemoryStreamImage.FromStream

这是最常用的方法,因为它不依赖于特定的图片格式,并且可以处理多种图片格式(如JPEG、PNG等)。

using System;  
using System.Drawing; // 需要引用 System.Drawing.Common NuGet包  
using System.IO;  
  
public class ImageConverter  
{  
    public static Image ByteArrayToImage(byte[] byteArray)  
    {  
        using (MemoryStream ms = new MemoryStream(byteArray))  
        {  
            Image returnImage = Image.FromStream(ms);  
            return returnImage;  
        }  
    }  
}

注意:上面的代码示例中,返回的Image对象是一个抽象基类,如果你需要将其转换为具体的类型(如Bitmap),你可以直接进行转换:

Bitmap bitmap = (Bitmap)Image.FromStream(ms);

使用Bitmap构造函数(仅适用于某些格式)

对于某些特定的图片格式(如BMP),你可以直接使用Bitmap的构造函数来从字节数组中加载图片:

using System.Drawing; // 需要引用 System.Drawing.Common NuGet包  
  
public class ImageConverter  
{  
    public static Bitmap ByteArrayToBitmap(byte[] byteArray)  
    {  
        using (MemoryStream ms = new MemoryStream(byteArray))  
        {  
            // 注意:这个构造函数可能不适用于所有图片格式,特别是JPEG和PNG  
            Bitmap bitmap = new Bitmap(ms);  
            return bitmap;  
        }  
    }  
}

但是,请注意,直接使用Bitmap的构造函数可能不适用于所有图片格式,特别是JPEG和PNG等格式。在这些情况下,你应该使用Image.FromStream方法。

注意:在使用System.Drawing命名空间时,你可能需要安装System.Drawing.Common NuGet包,特别是如果你的项目是基于.NET Core或.NET 5/6/7等较新版本的话。在.NET Framework项目中,这个命名空间通常是内置的。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐