方形图像使用自定义相机

see*_*ema 7 customization camera android

我正在使用surfaceview和自定义视图打开相机.使用这个我成功地能够使用getSupportedPictureSizes()中的一个大小来点击图片.但我想要方形图片.现在我点击图片后裁剪它.在Android中可以显示方形图像明亮和剩余相机预览上的暗覆盖,并且在点击时,仅点击广场内的预览.这在iPhone中是可能的.但不知道如何在Android中做到这一点.任何帮助将受到高度赞赏.

Ale*_*ohn 1

是的,您可以用 2 个半透明矩形覆盖 SurfaceView 以剪出正方形。

您应该计算捕获的高分辨率图像的预期裁剪效果。例如,如果您的相机支持4368x2912的图片尺寸,则需要裁剪(mLeft=728、mTop=0、mWidth=2912、mHeight=2912)。

byte[]要将自定义裁剪应用于从onPictureTaken()接收到的Jpeg ,您有两个选择:简单或高效。

最简单的方法是将 Jpeg 数据解码为位图,

@Override
public void onPictureTaken(final byte[] data, Camera camera) {
    Bitmap picture = BitmapFactory.decodeByteArray(data, 0, data.length);
    picture = Bitmap.createBitmap(picture, mLeft, mTop, mWidth, mHeight);
    picture.compress(Bitmap.CompressFormat.JPEG, 85, mFileOutputStream);
}
Run Code Online (Sandbox Code Playgroud)

缺点是速度可能很慢并且需要大量内存(12 MPixel 相机可能需要 60 MB)。

“智能”方法是使用 Jpeg 无损转换(例如,参见http://mediachest.sourceforge.net/mediautil/),使用少于 10 MB 的空间。请注意,这会施加一些限制,例如在上面的 12 MPixel 相机示例中,您可能需要 mLeft=720,因为 728 不能被 16 整除。