-
修改后的代码:
- 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);