从SQLite数据库保存和检索png?

时间:2013-07-01 15:37:39

标签: c# winforms sqlite listview png

将透明png图像下载到图像列表中时,将它们直接放在列表视图中,质量很高。

但是现在我正在尝试将图像保存到SQLite数据库中并以相同的高质量恢复它们,但是我尝试的所有内容都非常差。

我尝试了SQLite字段类型的IMAGE,CHAR和BLOB以及各种方法来取回数据。有最佳的田间类型吗?

我尝试将其保存为位图,但我无法找到如何将其转换回透明的png。也许这会奏效吗?

这是我尝试使用CHAR字段类型的最后一件事。当我将它添加到图像列表时,质量非常差(dr是SQLite数据行)。

byte[] imageBytes = Convert.FromBase64String(dr["image"].ToString());
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);

ms.Write(imageBytes, 0, imageBytes.Length);
Image image = Image.FromStream(ms, true);

有人可以告诉我如何将透明png保存为SQLite中的高质量图像,并以相同的高质量将其恢复原状吗?

由于

修改

我可以用这个保存到BMP:

string base64ImageString = ImageToBase64(imageList1.Images[i], ImageFormat.bmp);

但不知道如何将其作为透明的png取回,

修改

真正的问题是我失去了透明度。这些部分现在是黑色的。

我正在使用它,但它似乎没有帮助:

byte[] imageBytes = Convert.FromBase64String(dr["image"].ToString());
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);    

using (MemoryStream mss = new MemoryStream())
{
  bmp.Save(ms, ImageFormat.Png);
}

1 个答案:

答案 0 :(得分:1)

我没有正确保存。这在我需要的地方得到了质量。

FileInfo fi = new FileInfo(openFileDialog1.FileNames[j]);
FileStream fileStream = fi.OpenRead();
Image img = new Bitmap(fileStream);

string base64ImageString = ImageToBase64(img, ImageFormat.Bmp);

我仍然存在透明度方面的问题,但我会对其进行处理。