我的 Android 应用程序从 sd 卡读取图像文件并将图像存储在 sqlite 数据库中的 blob 中。
目前我正在将 FileInputStream 转换为字节数组并将其存储在 blob 中。一个 blob 不能超过 1MB 的大小,所以在这种情况下,我会发布一条错误消息并取消操作。
FileInputStream fis = null;
try {
fis = new FileInputStream(FilePath); // FilePath contains a valid path
} catch (FileNotFoundException e) {
Toast.makeText(MyActivity.this, "File not found: " + FilePath, Toast.LENGTH_LONG).show();
return;
}
BufferedInputStream bis = new BufferedInputStream(fis, 1070);
ByteArrayBuffer bab = new ByteArrayBuffer(128);
int current = 0;
try {
while ((current = bis.read()) != -1) bab.append((byte) current);
} catch (IOException e) {
Toast.makeText(MyActivity.this, "Error reading Picture: " + FilePath, Toast.LENGTH_LONG).show();
return;
}
byte[] imageBa = bab.toByteArray();
if (imageBa.length > 1024*1024)
showErrorDialog();
else {
saveImageInDatabase(imageBa); // sage image byte[] in BLOB-column so sq-lite database
// show image in imageView
imageStream = new ByteArrayInputStream(imageBa);
Bitmap imageBitmap = BitmapFactory.decodeStream(imageStream); // uncompressed imageBitmap has a much bigger size than the image-byte[]
imageView.setImageBitmap(imageBitmap);
}
我想通过降低分辨率(而不是大小)来摆脱 1MB 的限制并存储更大的图像。
我可以使用 BitmapFactory 选项 inSampleSize 来压缩图像和/或将位图转换回字节 [],例如使用 bitmap.compress 来寻求解决方案。然而,即使是使用 BitmapFactory 创建的未压缩位图的大小也比原始字节 [] 大得多,所以我担心我会失去质量。
任何想法如何解决我的问题?非常感谢,格哈德。