您的位置:首页 > 编程语言 > C#

C# byte[]与Image的相互转换

2013-07-24 17:13 417 查看
修改后的代码:

[c-sharp]
view plaincopyprint?

private byte[] convertByte(Image img)
{
MemoryStream ms = new MemoryStream();
img.Save(ms, img.RawFormat);
//byte[] bytes = new byte[ms.Length];
//ms.Read(bytes, 0, Convert.ToInt32(ms.Length));
//以上两句改成下面两句
byte[] bytes = ms.ToArray();
ms.Close();
return bytes;
}
private Image convertImg(byte[] datas)
{
MemoryStream ms = new MemoryStream(datas);
Image img = Image.FromStream(ms,
true);//在这里出错
//流用完要及时关闭
ms.Close();
return img;
}

private byte[] convertByte(Image img)
{
MemoryStream ms = new MemoryStream();
img.Save(ms, img.RawFormat);
//byte[] bytes = new byte[ms.Length];
//ms.Read(bytes, 0, Convert.ToInt32(ms.Length));
//以上两句改成下面两句
byte[] bytes = ms.ToArray();
ms.Close();
return bytes;
}
private Image convertImg(byte[] datas)
{
MemoryStream ms = new MemoryStream(datas);
Image img = Image.FromStream(ms, true);//在这里出错
//流用完要及时关闭
ms.Close();
return img;
}

附: img.Save(ms, img.RawFormat);

下面加一行

ms.Position = 0;

将流的位置置到开始处。

Image.Save方法会将流置到末尾,所以导致读取不到数据。

我写的代码:

private byte[] ConvertImageToByteArray(System.Drawing.Image img)

{

using (System.IO.MemoryStream ms = new MemoryStream())

{

img.Save(ms, img.RawFormat);

return ms.ToArray();

}

}

private System.Drawing.Image ConvertByteArrayToImage(byte[] byteArray)

{

using (MemoryStream ms = new MemoryStream(byteArray))

{

System.Drawing.Image img = System.Drawing.Image.FromStream(ms);

return img;

}

}

调用:
System.Drawing.Image img = System.Drawing.Image.FromFile(@"E:\\John App Doc and Demo\TelerikDemo\web\Images\photo1.jpg");

newC.Picture = ConvertImageToByteArray(img);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: