如何将BLOB转换为图像
本文关键字:图像 转换 BLOB | 更新日期: 2023-09-27 17:53:03
我有一个问题,显示这是存储在我的MySQL数据库中的图片。我不知道我是否成功存储了它但是使用这个函数将图像转换为blob文件,下面是函数:
private byte[] imageToByteArray(Image imageIn)
{
MemoryStream ms = new MemoryStream();
imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
return ms.ToArray();
}
当我检查我的数据库时,它显示BLOB与蓝色高亮。现在,我想在我的图片框中显示图像。我也有一个函数转换字节数组到图像..
private Image byteArrayToImage(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream(byteArrayIn);
ms.Position = 0;
Image returnImage = Image.FromStream(ms);
return returnImage;
}
当我运行应用程序时,它说:
ArgumentException未被保留,参数无效
我试过使用这个语法:
pictureBox1.Image = byteArrayToImage(dr["img"] as byte[]);
或者我在想我是否应该首先将BLOB转换为字节数组?然后使用该函数将字节数组转换为图像?
当我点击名称时,它应该显示信息,不幸的是,我收到了参数异常..
int i = dataGridView1.SelectedCells[0].RowIndex;
string firstname = dataGridView1.Rows[i].Cells[0].Value.ToString();
string lastname = dataGridView1.Rows[i].Cells[1].Value.ToString();
Connection connect = new Connection();
MySqlConnection mySqlConnect = new MySqlConnection(connect.connString());
mySqlConnect.Open();
string s = "SELECT * FROM tbl_contacts WHERE username = '" + label1.Text + "' and (fname = '" + firstname + "' and lname = '" + lastname + "')";
MySqlCommand mySQL = new MySqlCommand(s, mySqlConnect);
mySQL.ExecuteNonQuery();
MySqlDataReader dr = mySQL.ExecuteReader();
if (dr.HasRows)
{
dr.Read();
txtFname.Text = dr["fname"].ToString();
txtLname.Text = dr["lname"].ToString();
txtBday.Text = dr["birthday"].ToString();
txtEmail.Text = dr["email"].ToString();
txtMobile.Text = dr["mobile"].ToString();
txtAddress.Text = dr["address"].ToString();
txtNotes.Text = dr["notes"].ToString();
pictureBox1.Image = byteArrayToImage(dr["img"] as byte[]);
}
试试这样做:
byteArrayToImage(dr.GetSqlBytes(dr.GetOrdinal("img")).Buffer);
ArgumentException was unheld, Parameter is not valid
是由于损坏的图像。您的图像没有正确保存。将收到的byte[]
保存在磁盘中的某个文件中,并尝试将其重命名为.jpg
或.png
,并尝试打开。
由于各种原因导致二进制数据的损坏,二进制数据的Length
没有保存或修剪。如果您的数据库配置为存储5kb
,则有人编写代码将数据修剪为5kb
,而不是引发异常或追加缓冲区未正确编码,导致丢失最后几个字节。