Android 使用定制相机的方形图像

Android 使用定制相机的方形图像,android,camera,customization,Android,Camera,Customization,我正在使用surfaceview和自定义视图打开相机。使用此选项,我可以使用getSupportedPictureSizes()中的一种大小成功单击图片。但是我想要正方形的照片。现在我在点击图片后剪切它。在安卓系统中,可以在剩余的相机预览上显示明亮的正方形图像和黑暗的覆盖层,单击时,只单击正方形内部的预览。这在iPhone中是可能的。但我不知道如何在安卓系统中做到这一点。任何帮助都将不胜感激。是的,您可以在SurfaceView上覆盖两个半透明的矩形来切割正方形 您应该计算捕获的高分辨率图像的预

我正在使用surfaceview和自定义视图打开相机。使用此选项,我可以使用getSupportedPictureSizes()中的一种大小成功单击图片。但是我想要正方形的照片。现在我在点击图片后剪切它。在安卓系统中,可以在剩余的相机预览上显示明亮的正方形图像和黑暗的覆盖层,单击时,只单击正方形内部的预览。这在iPhone中是可能的。但我不知道如何在安卓系统中做到这一点。任何帮助都将不胜感激。

是的,您可以在SurfaceView上覆盖两个半透明的矩形来切割正方形

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

要将自定义裁剪应用于从接收的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);
}
缺点是速度慢并且需要巨大的内存(对于12mpixel相机可能需要60mbytes)


“智能”方法是使用Jpeg无损转换(例如,请参阅),使用小于10 MB的数据。请注意,这会带来一些限制,例如,在上面的12 MPixel相机示例中,您可能需要mLeft=720,因为728不能除以16。

预览几乎在整个屏幕上,顶部和底部都有半透明覆盖层。当我拍摄图像时,我只想拍摄/保存预览的顶部覆盖下方和底部覆盖上方的部分。。i、 e.预览没有任何标记的零件overlay@user2261466,如何拍摄图像?你想从相机上还是从画布上拿?在前一种情况下,是否可以使用预览帧,或者您需要更高的质量和可能更高的分辨率,但不同步?我需要从摄影机(不是默认摄影机,而是通过使用surfaceview和摄影机实例)拍照。。。要对从接收到的Jpeg字节[]应用自定义裁剪,您有两个选项:简单或高效。当我有一个全尺寸键盘时,我会更新我的答案。可能会导致某些设备的ExiFinInterface内存不足…请在此处查看我的答案: