亲测解决:自定义相机Camera2前后置拍照时相片翻转、旋转等显示问题
一开始我遇到的问题是,前置拍照获得的照片各种旋转、 翻转,就是不能正常,解决后的前后置拍照得到的图片都正常了,效果图如下(看底部中间显示的相片):
自定义相机的实现,网上有很多代码了,我这里不贴全部的代码,就贴解决前后置拍照怎么处理照片使其正常 (记得给相关权限),布局中用到的是TextureView控件。
1.前后置时的SparseIntArray 设置(默认的是前置,一开始调用front())
private static final SparseIntArray ORIENTATIONS = new SparseIntArray();
private void front() {
//前置时,照片竖直显示
ORIENTATIONS.append(Surface.ROTATION_0, 270);
ORIENTATIONS.append(Surface.ROTATION_90, 0);
ORIENTATIONS.append(Surface.ROTATION_180, 90);
ORIENTATIONS.append(Surface.ROTATION_270, 180);
}
private void rear() {
//后置时,照片竖直显示
ORIENTATIONS.append(Surface.ROTATION_0, 90);
ORIENTATIONS.append(Surface.ROTATION_90, 0);
ORIENTATIONS.append(Surface.ROTATION_180, 270);
ORIENTATIONS.append(Surface.ROTATION_270, 180);
}
2.切换前后置相机时做的处理
private String mCameraId = "1";//摄像头id(通常0代表后置摄像头,1代表前置摄像头)(应该有个按钮可以改变前后置的)
private CameraDevice cameraDevice;
private CameraCaptureSession mPreviewSession;
private CameraManager manager;
//stateCallback是摄像头状态
private void switch(){
if ("1".equals(mCameraId)) {//前置变后置
mCameraId = "0";
rear();
}else {//其它全部变成前置(默认的是前置)
mCameraId = "1";
front();
}
if (mPreviewSession != null) {
mPreviewSession.close();
mPreviewSession = null;
}
if (cameraDevice != null) {
cameraDevice.close();
cameraDevice = null;
}
try {
manager.openCamera(mCameraId, stateCallback, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
3.获取拍照的照片,并对其进行处理,使其正常,在ImageReader.OnImageAvailableListener的onImageAvailable方法里面,代码如下处理:
// 获取捕获的照片数据
Image image = reader.acquireNextImage();
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
byte[] data = new byte[buffer.remaining()];
buffer.get(data);
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
//前置时左右翻转时处理,后置是正常的,不需要处理了
if ("1".equals(mCameraId)){
Matrix m = new Matrix();
m.postScale(-1, 1); // 镜像水平翻转
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), m, true);
}
ivImage.setImageBitmap(bitmap);
image.close();//一定要,不能会……,你试试看
————————————————
版权声明:本文为CSDN博主「週莫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_40420578/article/details/104612819