我在相机的图像上绘制叠加层并将结果保存到文件中。为此,我将包含以下代码的回调传递给 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();
}
最佳答案
您实际上不需要对图像进行解码。而是将叠加层绘制到 Canvas 上,将 Canvas 保存为位图,将该位图转换为字节数组,然后组合 Canvas 的字节数组和位图,然后保存。
关于android - 如何有效地修改从相机捕获的字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9492268/