我正在用相机在图像上绘制覆盖图,并将结果保存到文件中。为此,我将一个包含以下代码的回调传递给takePicture()。对于较大的图像,在方法的第一行出现了OutOfMemoryError崩溃。
有什么办法可以更有效地做到这一点?似乎不可能从byte []中创建可变的位图,这会使我的内存使用量立即加倍。如果无法通过这种方式在高分辨率下完成,如何在不占用内存的情况下在大的捕获图像上生成覆盖图?
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();
}
最佳答案
您实际上不需要解码图像。而是将覆盖图绘制到画布上,将画布另存为位图,将该位图转换为字节数组,然后将画布的字节数组和位图合并,然后保存。