4

我想将 jpg 图像存储在 SqLite 数据库中,目前我正在使用以下代码:

public byte[] ImageToByte(Image image, System.Drawing.Imaging.ImageFormat format)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                image.Save(ms, format);
                byte[] imageBytes = ms.ToArray();
                return imageBytes;
            }
        }
void btn_click()...
{
                photo = new Bitmap("invoker.jpg");
                pic = ImageToByte(photo, System.Drawing.Imaging.ImageFormat.Jpeg);
                SaveImage(pic);
}

更新

void SaveImage(byte[] imagen)
        {
            string conStringDatosUsuarios = @" Data Source = \bang.sqlite3 ;Version=3";
            SQLiteConnection con = new SQLiteConnection(conStringDatosUsuarios);
            SQLiteCommand cmd = con.CreateCommand();
            cmd.CommandText = String.Format("INSERT INTO tbl_pictures (record_id, pic) VALUES ('1', @0);");
            SQLiteParameter param = new SQLiteParameter("@0", System.Data.DbType.Binary);
            param.Value = imagen;
            cmd.Parameters.Add(param);
            con.Open();

            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (Exception exc1)
            {
                MessageBox.Show(exc1.Message);
            }
            con.Close();
        }
4

3 回答 3

2

我认为从 jpg 创建位图是导致尺寸增加的步骤。实际上,我很惊讶它只是增加了 2 倍!

根据 wikipedia ( http://en.wikipedia.org/wiki/JPEG#Sample_photographs ),压缩比可以从 2.6x 到 46x 甚至更高。;)

于 2013-05-25T14:47:55.233 回答
1

好吧,西蒙确实找到了解决方案(不是答案)。但他没有发布最终答案。这是解决方案:

使用 C# 代码在 .NET 程序中创建空白数据库(不要使用第 3 方创建数据库)

是他使用的代码片段。

无论如何,我仍将等待一个完整的答案:为什么使用 3rd 方工具创建数据库会使 sqlite 以原始图像的 2 倍大小存储图像?它与在 .NET 中创建的数据库有何不同

于 2013-05-31T07:32:50.577 回答
0

也许这样的事情应该有所帮助:序列化/反序列化图像以存储在数据库中

我提到了这个问题:How to save image in database using C#

于 2013-05-12T18:11:23.830 回答