C#字节转图像
private Image GetImageFromMemory( byte[] _buff)
{
int length = (int)_width * (int)_height * (int)_pixelBytes;
Image test=null;
//Bitmap bitmap = null;
// int length = imagedatadetails.Length;
using (MemoryStream stream = new MemoryStream(length + 14 + 40))//为头腾出54个长度的空间
{
//开始写文件信息头
byte[] buffer = new byte[13];
buffer[0] = 0x42;//bitmap 固定常数
buffer[1] = 0x4d;//bitmap 固定常数
stream.Write(buffer, 0, 2);//先写入头的前两个字节
//把我们之前获得的数据流的长度转换成字节,
//这个是用来告诉“头”我们的实际图像数据有多大
byte[] bytes = BitConverter.GetBytes(length);
stream.Write(bytes, 0, 4);//把这个长度写入头中去
bytes = BitConverter.GetBytes(0);
stream.Write(buffer, 0, 4);//在写入4个字节长度的数据到头中去
int num2 = 54;//bitmap 固定常数也就是十六进制的0x36
bytes = BitConverter.GetBytes(num2);
stream.Write(bytes, 0, 4);//在写入最后4个字节的长度
//开始写入位图信息头
bytes = BitConverter.GetBytes(40); //写入信息头的长度biSize
stream.Write(bytes, 0, 4);
bytes = BitConverter.GetBytes(_width); //写入信息头的图像宽度biWidth
stream.Write(bytes, 0, 4);
bytes = BitConverter.GetBytes(_height * -1); //写入信息头的图像高度biHeight
stream.Write(bytes, 0, 4);
bytes = BitConverter.GetBytes((short)8); //写入信息头的biPlanes
stream.Write(bytes, 0, 2);
bytes = BitConverter.GetBytes((short)32); //写入信息头的biBitCount
stream.Write(bytes, 0, 2);
bytes = BitConverter.GetBytes(0); //写入信息头的biCompression
stream.Write(bytes, 0, 4);
bytes = BitConverter.GetBytes(0); //写入信息头的biSizeImage
stream.Write(bytes, 0, 4);
bytes = BitConverter.GetBytes(0); //写入信息头的biXPelsPerMeter
stream.Write(bytes, 0, 4);
bytes = BitConverter.GetBytes(0); //写入信息头的biYPelsPerMeter
stream.Write(bytes, 0, 4);
bytes = BitConverter.GetBytes(0); //写入信息头的biClrUsed
stream.Write(bytes, 0, 4);
bytes = BitConverter.GetBytes(0); //写入信息头的biClrImportant
stream.Write(bytes, 0, 4);
stream.Write(_buff, 0, length);
stream.GetBuffer();
try
{
test= Image.FromStream(stream);
}
catch (Exception)
{
test = null;
}
stream.Close();
//stream.GetBuffer();
//GC.Collect();
return test;//最后就得到了我们想要的图片了
}
}
代码忘记在哪里找的了