我知道有很多关于“使用 android 加载图像”主题的主题,但不幸的是,我没有在其中任何一个中找到解决问题的方法。所以这是我的问题:
我想保存一个大图像和另一个用于稍后裁剪的图像,这是我的代码:
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inJustDecodeBounds = true;
BitmapFactory.decodeFile(image, bmOptions);
final int REQUIRED_SIZE = 800;
int scale = 1;
while (bmOptions.outWidth / scale / 2 >= REQUIRED_SIZE && bmOptions.outHeight / scale / 2 >= REQUIRED_SIZE) {
scale *= 2;
}
bmOptions.inJustDecodeBounds = false;
bmOptions.inSampleSize = scale;
bmOptions.inPurgeable = true;
bmOptions.inInputShareable = true;
// create the Image for the original File
try {
File origFile = File.createTempFile(origImage, JPEG_FILE_SUFFIX, getAlbumDir());
OutputStream fOut2 = new FileOutputStream(origFile);
Bitmap thePic = BitmapFactory.decodeFile(image, bmOptions);
thePic.compress(Bitmap.CompressFormat.JPEG, 100, fOut2);
fOut2.flush();
fOut2.close();
} catch (Exception e) {
Log.e(TAG, "Cannot create original Image");
}
mImageBitmap = BitmapFactory.decodeFile(image, bmOptions);
这段代码的工作时间约为 90%。但有时bmOptions.outHeight
&bmOptions.outWidth returns -1
并列Bitmap thePic = BitmapFactory.decodeFile(image, bmOptions);
我得到了例外:
10-31 12:07:31.645: E/AndroidRuntime(16618): java.lang.OutOfMemoryError
10-31 12:07:31.645: E/AndroidRuntime(16618): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
10-31 12:07:31.645: E/AndroidRuntime(16618): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:652)
10-31 12:07:31.645: E/AndroidRuntime(16618): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:391)
我认为问题可能是:
- 我背靠背拍摄了多张照片,一段时间后可能会出现此错误
- 当我在拍照时转动显示器时会发生这种情况
但是经过大量测试后,我仍然不确定这两种可能性中的任何一种是否正确,或者是否有其他问题。
有谁知道我做错了什么?
编辑:
在对我的应用程序进行大量测试后,我遇到了以下问题:
每次我开始这个过程时,我都会丢失大约 2 MB 的 RAM。这意味着一段时间后我的应用程序将关闭。
我为解决这个问题所做的工作:
-) 不要创建原始图像 -) 将样本大小设置为 16(而不是计算的 2)-) 完全删除位图
问题保持不变;我总是丢失 2 MB RAM。有谁知道问题可能是什么?