我有一台相机用于拍照,我的问题出现在onPictureTaken功能上:
public Camera.PictureCallback jpeghandler = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
Options options = new BitmapFactory.Options();
options.inScaled = false;
options.inDither = false;
options.inSampleSize = 2;
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
photo = BitmapFactory.decodeByteArray(data, 0, data.length, options);
Matrix matrix = new Matrix();
matrix.postRotate(90);
Bitmap rotate_bitmap = Bitmap.createBitmap(photo , 0, 0, photo.getWidth(), photo.getHeight(), matrix, true);
photo.recycle();
photo = Bitmap.createBitmap(rotate_bitmap, 0, rotate_bitmap.getHeight()/2 - rotate_bitmap.getWidth()/2, rotate_bitmap.getWidth(), rotate_bitmap.getWidth());
Intent resultIntent = new Intent();
String image_url = MediaStore.Images.Media.insertImage(getContentResolver(), photo, "photo" , null);
resultIntent.putExtra("Photo_Taken", image_url);
setResult(Activity.RESULT_OK, resultIntent);
photo.recycle();
rotate_bitmap.recycle();
finish();
}
};
我有另一个活动打开这个,然后我拍照,关闭这个并将图像的位置传回第一个活动。问题是,当我重新打开此活动以拍摄另一张照片时,它会在此行中显示Out of Memory错误:
Bitmap rotate_bitmap = Bitmap.createBitmap(photo , 0, 0, photo.getWidth(), photo.getHeight(), matrix, true);
出了什么问题,发生了什么?因为照片大小总是低于25Mb,然后在第二张照片中出现这样:13128976字节分配的内存不足。
谢谢!
答案 0 :(得分:0)
你的堆满了[(图像数据)+(其他数据)> (堆大小)]。我相信您有两个存储在堆上的照片实例(当第二个活动启动时,第一个活动的数据(包括照片)尚未从内存中清除)。
如果您正在使用Eclipse,我强烈建议您安装Memory Analyzer (MAT)
查看my question了解详情。