文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android项目中如何实现自定义相机预览界面

2023-05-31 13:08

关注

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(); } }

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯