由于“参数无效”导致的图像检索问题

时间:2014-10-13 19:10:22

标签: c# .net sqlite

我的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数据库中执行相同的查询时,我得到enter image description here

这基本上是2个空行,我认为是图像。

关于我可能遗失的任何想法?

编辑:
附:为了澄清,我试图将现有的byte []转换为图像

2 个答案:

答案 0 :(得分:0)

尝试检查从数据库中写入/读取图像数据的方式,请查看此处 How do i store and retrieve a blob from sqlite

答案 1 :(得分:0)

是的,我终于明白了。

代码没有任何问题。从数据库读取的数据显示为10,因为它只能读取10个字节的数据,这只是整个图像的一部分。我认为图像的其余部分在某种交易中丢失了。

无论如何,感谢那些尝试帮助的人。

最后,它确实不是编码错误,因为无论谁在我之前插入值都做了一些扭曲的工作。和合。