【问题标题】:Bitmap Out Of Memory on a Photo taken拍摄照片上的位图内存不足
【发布时间】:2013-07-12 16:17:57
【问题描述】:

我有一个用来拍照的相机,我的问题出在 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,然后在第二张照片中显示为:Out of memory on a 13128976-byte allocation.

谢谢!

【问题讨论】:

    标签: java android camera android-camera


    【解决方案1】:

    您的堆已满 [(图像数据)+(其他数据)>(堆大小)]。我相信您有两个照片实例存储在堆中(当第二个活动启动时,第一个活动的数据(包括照片)尚未从内存中清除)。

    如果您使用的是 Eclipse,我强烈建议您安装 Memory Analyzer (MAT)

    查看my question了解更多信息。

    【讨论】:

      猜你喜欢
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      相关资源
      最近更新 更多