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