如何有效地修改摄像头捕获的字节?

时间:2012-02-29 01:14:17

标签: android memory bitmap camera image

我在相机上的图像上绘制一个叠加层并将结果保存到文件中。为此,我将包含以下代码的回调传递给takePicture()。对于较大的图像大小,我在方法的第一行遇到OutOfMemoryError崩溃。

有什么办法可以更有效地做到这一点吗?似乎不可能从byte []创建一个可变位图,这会立即使我的内存使用量翻倍。如果在高分辨率下无法以这种方式完成,那么<​​em>可以如何在大型捕获图像上生成叠加而不会耗尽内存?

public void onPictureTaken(byte[] rawPlainImage, Camera camera) {
    Bitmap plainImage = BitmapFactory.decodeByteArray(rawPlainImage, 0, rawPlainImage.length);
    plainImage = plainImage.copy(plainImage.getConfig(), true);
    Canvas combinedImage = new Canvas(plainImage);
    combinedImage.drawBitmap(mOverlay, mOverlayTransformation, null);
    //Write plainImage (now modified) out to a file
    plainImage.recycle();
}

1 个答案:

答案 0 :(得分:1)

您实际上不需要解码图像。而是将叠加层绘制到画布上,将画布保存为位图,将该位图转换为字节数组,然后组合画布的字节数组和位图,然后保存它。