通过Android应用程序在数据库中保存png图像

问题描述 投票:-1回答:1

我希望使用我开发的应用程序将图像保存到移动设备中,这是最好的方法。

我试图通过sqlite保存但是还有其他选择吗?

android sqlite imageview android-image android-database
1个回答
0
投票

建议的方法是将图像存储为不在数据库中的文件,然后存储路径或足够的路径以唯一标识数据库中的图像。

要存储图像,必须将其存储为基于byte [](字节数组)的BLOB;但是,使用Android SDK时,即使可以保存,也只能检索小于2MB的图像。

  • 从技术上讲,你可以将图像存储为十六进制,二进制,八进制字符串,但这将更复杂,效率更低,甚至更具限制性。所以你必须将它存储为BLOB并非完全是事实。

实际上,使用SQLite或大多数结构化数据库存储图像(或任何大型文件)实际上都是无用的,因为您无法对数据查询进行明智的处理。

实际上你通过SQL使用以下方法保存BLOB: -

INSERT INTO your_table VALUES(x'00FF01EF');
  • 即00(0)是第一个字节,FF(255)是第2个,01(01)是第3个.........
  • 请注意,上述内容仅适用于具有单列的表

但是,SQLiteDatabase插入便捷方法代表您执行从byte []到正确SQL(十六进制字符串)的转换。

所以你通常使用: -

ContentValues cv = new ContentValues();
cv.put("your_column",your_image_as_a_byte_array);
your_sqlitedatabase_object.insert("your_table",null,cv);

您可以使用沿着行的内容从Cursor(查询结果)中检索字节数组

your_retrieved_image_byte_array = your_cursor.getBlob(your_column_offset_as_an_int); //<<<<<<<<< CursorWindow full error if the row cannot fit into the CursorWindow which has 2MB limit

您可能希望看看How can I insert image in a sqlite database,因为它会更详细,并且具有存储图像和路径的代码(根据图像大小存储一个,小于100k,然后存储图像,否则路径为存储)并另外将图像检索到ListView中。此外,虽然不推荐这是一种绕过2Mb限制How to use images in Android SQLite that are larger than the limitations of a CursorWindow?的方法

© www.soinside.com 2019 - 2024. All rights reserved.