繁体   English   中英

如何将 BLOB 转换为图像

[英]How to convert BLOB to Image

我在显示存储在我的 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 转换为字节数组? 然后使用函数将字节数组转换为Image?
当我单击名称时,它应该显示信息,不幸的是,我收到了参数异常..

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而不是引发异常或附加缓冲区未正确编码导致丢失最后几个字节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM