使用定制相机拍摄方形图像



我正在使用surfaceview和自定义视图打开相机。使用这个,我可以成功地使用getSupportedPictureSize()中的一个大小来点击图片。但我想要正方形的图片。现在我正在点击图片后裁剪它。在安卓系统中,可以在剩余的相机预览上显示正方形图像的明亮和深色覆盖,点击时,只有正方形内部的预览才会被点击。这在iPhone中是可能的。但不知道如何在android中做到这一点。如有任何帮助,我们将不胜感激。

是的,您可以用两个半透明矩形覆盖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);
}

缺点是它可能很慢,并且需要巨大的内存(对于12M像素的相机来说可能是60MB)。

"聪明"的方法是使用Jpeg无损变换(例如http://mediachest.sourceforge.net/mediautil/),使用不到10 MB。请注意,这会带来一些限制,例如,在上面的12M像素相机的示例中,您可能需要mLeft=720,因为728不能除以16。

最新更新