从(sqlite数据库中读取Data(blob),并将他转换成jpg。
因为读入的是jp2格式的数据,.Net不支持,因此载了FreeImage的库。具体步骤如下:
- 读出blob后转换成byte[]
- 由byte[]生成MemoryStream
- 由MemoryStream生成FIBITMAP(载了FreeImage的库)
- 将FIBITMAP保存成jpg文件
代码如下:
1 byte[] blob = new byte[200];
2
3 using (var connection = new SQLiteConnection(@"Data Source=database"))
4
5 using (var command = new SQLiteCommand("SELECT * FROM pic", connection))
6
7 {
8
9 connection.Open();
10
11 command.ExecuteNonQuery();
12
13 using (var reader = command.ExecuteReader())
14
15 {
16 while (reader.Read())
17 {
18 blob = (byte[])reader["Data"];
19
20 //byte[] buffer = GetBytes(reader);
21
22 MemoryStream ms = new MemoryStream(blob);
23
24 FIBITMAP dib = FreeImage.LoadFromStream(ms);
25
26 if (dib.IsNull)
27
28 {
29 continue;
30 }
31
32 string jpgName = getJpgName();
33
34 FreeImage.Save(FREE_IMAGE_FORMAT.FIF_JPEG, dib, jpgName, FREE_IMAGE_SAVE_FLAGS.JPEG_QUALITYNORMAL);
35
36 }
37
38 }
39
40
41
42 }