我的sqlite3数据库中有一些图像,我试图使用.Net framework 4.5将其检索到我的Windows应用程序中。 对于以下代码,我收到错误说明
发生了'System.ArgumentException'类型的未处理异常 System.Drawing.dll附加信息:参数无效。
这似乎总是由于内存流而发生。
private void button1_Click(object sender, EventArgs e)
{
using( MemoryStream ms = new MemoryStream(GetImageFromDB(1), false))
{
Image dbImg = Image.FromStream(ms); //System.ArgumentException--Parameter Not Valid
dbImg.Save("Testing", System.Drawing.Imaging.ImageFormat.Png);
}
}
private byte[] GetImageFromDB(int ImgId)
{
byte[] btImage;
sql_con = new SQLiteConnection("Data Source=test.db; Version=3;New=False;Compress=True;");
string str = "select org_file_header_blob from file where _id = 1;";
sql_cmd = new SQLiteCommand(str, sql_con);
sql_con.Open();
btImage = (byte[])sql_cmd.ExecuteScalar();
sql_con.Close();
return btImage;
}
之前我使用过类似的代码,效果很好。我已经尝试了几种方法来摆脱错误,但每次都是一样的。我试过了:
使用:
将其放入Bitmap对象而不是Image对象Bitmap dbImg = new Bitmap(ms);
和
...
sql_con.Close();
TypeConverter tc = TypeDescriptor.GetConverter(typeof(Bitmap));
Bitmap bitmap1 = (Bitmap)tc.ConvertFrom(btImage);
bitmap1.Save("Testing", System.Drawing.Imaging.ImageFormat.Png);
...
我甚至使用sql_con.Close()
命令在btImg.length
之后检查了btImg的长度。它给了我10作为输出。如果我假设是10个字节,那就没有任何意义,因为它是一个图像。
当我在sqlite3数据库中执行相同的查询时,我得到
这基本上是2个空行,我认为是图像。
关于我可能遗失的任何想法?
编辑:
附:为了澄清,我试图将现有的byte []转换为图像
答案 0 :(得分:0)
尝试检查从数据库中写入/读取图像数据的方式,请查看此处 How do i store and retrieve a blob from sqlite
答案 1 :(得分:0)
是的,我终于明白了。
无论如何,感谢那些尝试帮助的人。
最后,它确实不是编码错误,因为无论谁在我之前插入值都做了一些扭曲的工作。和合。