Android项目中如何实现自定义相机预览界面?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。官方文档:public static void setCameraD
Android项目中如何实现自定义相机预览界面?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
官方文档:
public static void setCameraDisplayOrientation(Activity activity,int cameraio, Camera camera){Camera.CameraInfo info=new Camera.CameraInfo();Camera.getCameraInfo(cameraIo,info);int rotation=activity.getWindowManager().getDefaultDisplay().getRotation();int degress=0;switch(rotation){case Surface.ROTATION_0: degress=0; break;case Surface.ROTATION_90: degress=90; break; case Surface.ROTATION_180: degress=180; break;case Surface.ROTATION_270: degress=270; break;}int result;if(info.facing=Camera.CameraInfo.CAMERA_FACING_FRONT){ result = (info.orientation + degrees) % 360; > 就是摄像头需要顺时针转过多少度才能恢复自然方向 result = (360 - result) % 360; } else { // back-facing result = (info.orientation - degrees + 360) % 360; } camera.setDisplayOrientation(result);switch (result) { case 0: case 180: setCameraSize(camera.getParameters(), getScreenWidth(), getScreenHeight()); break; case 90: case 270: setCameraSize(camera.getParameters(), getScreenHeight(), getScreenWidth()); break;}}public static void setCameraSize(Camera.Parameters parameters, int width, int height) { Map<String, List<Size>> allSizes = new HashMap<>(); String typePreview = "typePreview"; String typePicture = "typePicture"; allSizes.put(typePreview, parameters.getSupportedPreviewSizes()); allSizes.put(typePicture, parameters.getSupportedPictureSizes()); Iterator iterator = allSizes.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, List<Size>> entry = (Map.Entry<String, List<Size>>) iterator.next(); List<Size> sizes = entry.getValue(); if (sizes == null || sizes.isEmpty()) continue; ArrayList<WrapCameraSize> wrapCameraSizes = new ArrayList<>(sizes.size()); for (Size size : sizes) { WrapCameraSize wrapCameraSize = new WrapCameraSize(); wrapCameraSize.setWidth(size.width); wrapCameraSize.setHeight(size.height); wrapCameraSize.setD(Math.abs((size.width - width)) + Math.abs((size.height - height))); if (size.width == width && size.height == height) { if (typePreview.equals(entry.geTKEy())) { parameters.setPreviewSize(size.width, size.height); } else if (typePicture.equals(entry.getKey())) { parameters.setPictureSize(size.width, size.height); } Log.d(TAG, "best size: width=" + size.width + ";height=" + size.height); break; } wrapCameraSizes.add(wrapCameraSize); } Log.d(TAG, "wrapCameraSizes.size()=" + wrapCameraSizes.size()); Size resultSize = null; if (typePreview.equals(entry.getKey())) { resultSize = parameters.getPreviewSize(); } else if (typePicture.equals(entry.getKey())) { resultSize = parameters.getPictureSize(); } if (resultSize == null || (resultSize.width != width && resultSize.height != height)) { //找到相机Preview Size 和 Picture Size中最适合的大小 if(wrapCameraSizes.isEmpty()) continue; WrapCameraSize minCameraSize = Collections.min(wrapCameraSizes); while (!(minCameraSize.getWidth() >= width && minCameraSize.getHeight() >= height)) { wrapCameraSizes.remove(minCameraSize); if(wrapCameraSizes.isEmpty()) break; minCameraSize = null; minCameraSize = Collections.min(wrapCameraSizes); } Log.d(TAG, "best min size: width=" + minCameraSize.getWidth() + ";height=" + minCameraSize.getHeight()); if (typePreview.equals(entry.getKey())) { parameters.setPreviewSize(minCameraSize.getWidth(), minCameraSize.getHeight()); } else if (typePicture.equals(entry.getKey())) { parameters.setPictureSize(minCameraSize.getWidth(), minCameraSize.getHeight()); } } iterator.remove(); } }
--结束END--
本文标题: Android项目中如何实现自定义相机预览界面
本文链接: https://www.lsjlt.com/news/225768.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0