Android裁剪相机图像

Android crop camera image

我正在构建一个类似于图中所示条码扫描器的相机应用程序。我需要同时使用 Cameraandroid.hardware.camera2 API 来支持 android API >= 19。

主要思想是在整个屏幕上进行相机预览,但只保存未变暗的部分(或拍摄未变暗的区域)。我已经做了一些研究,发现不可能通过 Cameraandroid.hardware.camera2 API 只拍摄部分图片(但我不是 100% 确定)。所以我想我需要对我收到的作为相机捕获结果的字节数组(压缩成 JPEG)进行一些操作。

我尝试以这种方式使用 BitmapRegionDecoder:

BitmapRegionDecoder decoder = BitmapRegionDecoder.newInstance(bytes, 0, bytes.length, false);
Bitmap bitmap = decoder.decodeRegion(new Rect(500, 500, 1500, 1500), null);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, output);

其中bytes是相机拍摄的JPEG压缩结果。但是这种方法改变了图像的方向并且不裁剪由Rect定义的区域(实际上裁剪图像的另一部分)

对于如何实现所需行为的任​​何建议和提示,我将不胜感激。

已经有一段时间了,但人们仍然对这个问题感兴趣。这就是为什么我要分享我是如何解决这个问题的。

  • 我将从相机拍摄的完整图像保存为 .jpg。
  • 然后我从 .jpg 文件中获取旋转角度。裁剪不同区域的问题是因为每个图像都有旋转角度,我可以从 ExifInterface
  • 缩放裁剪区域(相机上的浅色矩形)以保存图像尺寸。
  • 将裁剪区域旋转一个之前得到的角度。