Android裁剪相机图片

时间:2016-08-20 19:39:32

标签: android image camera android-camera2

我正在构建一个类似于图片中所示的条形码扫描仪的相机应用程序。我需要使用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定义的区域(实际上会裁剪图像的另一部分)

我很感激有关如何实现理想行为的任何建议和提示。

enter image description here

1 个答案:

答案 0 :(得分:0)

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

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