我有一个类似联系人 contentprovider 的数据库,因为该用户可以捕获每个联系人的图像,捕获后,我将图像编码为 base64 并保存到文件中,并使用文件的路径更新该图像字段,并同步所有如果用户在线,则与服务器的联系人,以及我在需要时从服务器获取所有这些数据,同时我从文件中获取图像时我面临内存不足异常 base64,如果我将图像保存在数据库中是解决问题?
问问题
1313 次
1 回答
1
当您尝试对整个图像进行编码时,图像通常会在 Android 中导致 OutOfMemoryException。为此,以块的形式读取图像数据,然后在对块应用编码后将块保存在临时文件中。编码完成后,对编码的图像文件做任何你想做的事情。
这是从文件编码图像并使用块将其保存在文件中的代码..
String imagePath = "Your Image Path";
String encodedImagePath = "Path For New Encoded File";
InputStream aInput;
Base64OutputStream imageOut = null;
try {
aInput = new FileInputStream(imagePath);
// carries the data from input to output :
byte[] bucket = new byte[4 * 1024];
FileOutputStream result = new FileOutputStream(encodedImagePath);
imageOut = new Base64OutputStream(result, Base64.NO_WRAP);
int bytesRead = 0;
while (bytesRead != -1) {
// aInput.read() returns -1, 0, or more :
bytesRead = aInput.read(bucket);
if (bytesRead > 0) {
imageOut.write(bucket, 0, bytesRead);
imageOut.flush();
}
imageOut.flush();
imageOut.close();
} catch (Exception ex) {
Log.e(">>", "error", ex);
}
于 2013-01-08T15:31:31.640 回答