方形图像使用自定义相机

时间:2013-12-03 13:23:29

标签: android camera customization

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

1 个答案:

答案 0 :(得分:1)

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

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

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

简单的方法是将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);
}

缺点是它可能很慢并且需要大量内存(对于12 MP像素相机可能需要60 MB)。

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