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