阜阳市网站建设,网页版传奇开服,No物流网站建设,网站开发原型工具Android 7.1 默认自拍镜像 近来收到客户需求反馈需要将相机前摄成像默认为镜像显示#xff0c;大致思路我们可以在保存数据前将前摄拍的照片转为镜像#xff0c;保存数据是通过PhotoMode.java文件中的saveData方法实现#xff0c;具体修改参照如下#xff1a;
首先添加将图…Android 7.1 默认自拍镜像 近来收到客户需求反馈需要将相机前摄成像默认为镜像显示大致思路我们可以在保存数据前将前摄拍的照片转为镜像保存数据是通过PhotoMode.java文件中的saveData方法实现具体修改参照如下
首先添加将图片转为镜像显示的方法具体功能代码参照如下
/vendor/mediatek/proprietary/packages/apps/Camera2/common/src/com/mediatek/camera/common/utils/CameraUtil.java
public static byte[] mirrorJpegData(byte[] jpegData, int orientation) {byte[] dest jpegData;BitmapFactory.Options opts new BitmapFactory.Options();opts.inMutable true;Bitmap b BitmapFactory.decodeByteArray(jpegData, 0, jpegData.length, opts);b PhotoModeHelper.rotateAndMirror(b, 0, true);ByteArrayOutputStream baos new ByteArrayOutputStream();b.compress(Bitmap.CompressFormat.JPEG, 100, baos);dest baos.toByteArray();b.recycle();return dest;}
其次我们在相机保存数据前将前摄拍的照片转为镜像拍摄时使用的是前摄还是后摄可以通过CameraId来区分CameraId值为0是后摄CameraId值为1是前摄具体修改参照如下
/vendor/mediatek/proprietary/packages/apps/Camera2/common/src/com/mediatek/camera/common/mode/photo/PhotoMode.java private void saveData(byte[] jpegData) {if (jpegData ! null) {//check memory to decide whether it can take next picture.//if not, show savingISettingManager.SettingController controller mISettingManager.getSettingController();String dngState controller.queryValue(KEY_DNG);long saveDataSize jpegData.length;if(mCameraId.equals(1)){jpegData CameraUtil.mirrorJpegData(jpegData,0);}if (dngState ! null on.equalsIgnoreCase(dngState)) {saveDataSize saveDataSize DNG_IMAGE_SIZE;}
最后成像后在相机界面预览的缩略图我们也要做相应的镜像处理具体修改参照如下
/vendor/mediatek/proprietary/packages/apps/Camera2/common/src/com/mediatek/camera/common/mode/photo/PhotoMode.java private void updateThumbnail(byte[] jpegData) {Bitmap bitmap BitmapCreator.createBitmapFromJpeg(jpegData, mIApp.getAppUi().getThumbnailViewWidth());if(mCameraId.equals(1)){bitmap PhotoModeHelper.rotateAndMirror(bitmap, 0, true);}mIApp.getAppUi().updateThumbnail(bitmap);}
重新编译验证修改生效已实现相机前摄成像默认为镜像显示