android - 如何有效地修改从相机捕获的字节?

标签 android memory bitmap camera image

我在相机的图像上绘制叠加层并将结果保存到文件中。为此,我将包含以下代码的回调传递给 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/

相关文章:

c# - 程序占用太多内存

java - 排序文件内容和文件大小 4gb 和 ram 2gb

c# - 生成空白图像的图形 - 有时

java - ViewPager : OutOfResourcesException locking surface

android - 视频适合android中的屏幕

android - 什么控制 View 之间的默认填充?

ios - XCode Instruments 6(到目前为止)没有反射(reflect)正确的内存量

android - 如何将字节数组中的图像文件数据转换为位图?

c# - C# 中的无损位图旋转

ANDROID 未授予权限