我在相机上的图像上绘制一个叠加层并将结果保存到文件中。为此,我将包含以下代码的回调传递给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();
}
答案 0 :(得分:1)
您实际上不需要解码图像。而是将叠加层绘制到画布上,将画布保存为位图,将该位图转换为字节数组,然后组合画布的字节数组和位图,然后保存它。