一開始我遇到的問題是,前置拍照獲得的照片各種旋轉、 翻轉,就是不能正常,解決后的前后置拍照得到的圖片都正常了,效果圖如下(看底部中間顯示的相片):
自定義相機的實現,網上有很多代碼了,我這里不貼全部的代碼,就貼解決前后置拍照怎么處理照片使其正常 (記得給相關權限),布局中用到的是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