我正在使用以下代码将二进制格式的图像添加到ms访问数据库。存储此图像的数据库中的字段数据类型为OLE Object
。
读者的价值[" Photo"]如下所示
(byte[])reader["Photo"] {byte[26]}
byte[] [0] 83 byte [1] 0 byte [2] 121
byte [3] 0 byte [4] 115
byte [5] 0 byte [6] 116
byte [7] 0 byte [8] 101
byte [9] 0 byte [10] 109
byte [11] 0 byte [12] 46
byte [13] 0 byte [14] 66
byte [15] 0 byte [16] 121
byte [17] 0 byte [18] 116
byte [19] 0 byte [20] 101
byte [21] 0 byte [22] 91
byte [23] 0 byte [24] 93
byte [25] 0 byte
private byte[] imageToByteArray()
{
//Store the profile image to the database in binary format
MemoryStream ms = new MemoryStream();
pbProfilePic.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] Pic_arr = new byte[ms.Length];
ms.Position = 0;
ms.Read(Pic_arr, 0, Pic_arr.Length);
return Pic_arr;
}
现在,我正在使用以下代码从数据库中检索此图像。
OleDbCommand cmd = new OleDbCommand("select * from Employees where EmpId=" + datarecordId + "", conn);
OleDbDataReader reader = cmd.ExecuteReader();
pbProfilePic.Image = byteArrayToImage((byte[])reader["Photo"]);
public Image byteArrayToImage(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
return returnImage;
}
但是,我在Image returnImage = Image.FromStream(ms);
附加信息:参数无效。
任何人都可以帮我解决这个错误。
感谢。
我使用以下代码将图像以二进制格式存储到MS访问数据库
private byte[] imageToByteArray()
{
//Store the profile image to the database in binary format
MemoryStream ms = new MemoryStream();
pbProfilePic.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] Pic_arr = new byte[ms.Length];
ms.Position = 0;
ms.Read(Pic_arr, 0, Pic_arr.Length);
return Pic_arr;
}
答案 0 :(得分:0)
你可以试试这个:
public Image byteArrayToImage(byte[] byteArrayIn)
{
Image retval = null;
using (MemoryStream stream = new MemoryStream(byteArrayIn))
{
retval = (Image)new Bitmap(stream);
}
return retval;
}
另外,正如methodMan所说,调试器告诉你什么? byteArrayIn的值是多少? MemoryStream是否已正确初始化?
答案 1 :(得分:0)
如果我只是从随机字符串创建一个byte []并使用byteArrayToImage,我会得到同样的错误。问题是原始图像数据不好。
我尝试在PictureBox上使用你的方法(imageToByteArray和byteArrayToImage),jpg作为图像嵌入,它运行时没有错误,转换为byte []然后转换为Image。听起来好像有些东西可能损坏了图片框中的原始数据。