问题来源是来自项目自定义相机模块,问题出现在拍摄下的照片与预览的照片课时范围不一致,在测试手机上出现的具体情况是拍摄的照片可视宽度大于预览的画面。

问题出在 该自定义相机采用了全屏预览画面,以及虚拟按键占用了部分屏幕高度,预览分辨率的选择没有与相机匹配,导致最终拍照与预览不一致。

简单解决方式类似手机系统相机,将预览画面与相机拍摄画面维持同一分辨率比例,比如16:9,预览TextureView宽度拉满,预览高度自适应。

高适配的话需要根据屏幕分辨率,匹配最合适的预览分辨率/拍照分辨率。

寻找与当前屏幕分辨率最接近的 分辨比率

Set ratios = mCameraView.getSupportedAspectRatios();

float screenRatio = (float) screenheight / (float) screenWidth;

AspectRatio lastRatio = null;

for (AspectRatio ratio : ratios) {

if(lastRatio == null){

lastRatio = ratio;

continue;

}

float ratioXY = ratio.toFloat();

if (Math.abs(ratioXY-screenRatio)

lastRatio = ratio;

}

}

if (lastRatio != null) {

mCameraView.setAspectRatio(lastRatio);

}

获取支持的预览分辨率(排除与可拍照不同的size)

Set getSupportedAspectRatios() {

SizeMap idealAspectRatios = mPreviewSizes;

for (AspectRatio aspectRatio : idealAspectRatios.ratios()) {

if (mPictureSizes.sizes(aspectRatio) == null) {

idealAspectRatios.remove(aspectRatio);

}

}

return idealAspectRatios.ratios();

}

mPreviewSizes 与 mPictureSizes.sizes 来源

mCamera = Camera.open(mCameraId);

mCameraParameters = mCamera.getParameters();

// Supported preview sizes

mPreviewSizes.clear();

for (Camera.Size size : mCameraParameters.getSupportedPreviewSizes()) {

mPreviewSizes.add(new Size(size.width, size.height));

}

// Supported picture sizes;

mPictureSizes.clear();

for (Camera.Size size : mCameraParameters.getSupportedPictureSizes()) {

mPictureSizes.add(new Size(size.width, size.height));

}

// AspectRatio

if (mAspectRatio == null) {

mAspectRatio = Constants.DEFAULT_ASPECT_RATIO;

}

最终执行完后,需要从分辨率比例中找一个小于屏幕分辨率的最大预览分辨率,并重新给相机设置参数

if (mShowingPreview) {

mCamera.stopPreview();

}

mCameraParameters.setPreviewSize(size.getWidth(), size.getHeight());

mCameraParameters.setPictureSize(pictureSize.getWidth(), pictureSize.getHeight());

mCameraParameters.setRotation(calcCameraRotation(mDisplayOrientation));

try {

mCamera.setParameters(mCameraParameters);

} catch (Exception e) {

mAspectRatio = chooseAspectRatio();

adjustCameraParameters();

}

if (mShowingPreview) {

mCamera.startPreview();

}

参考

本文地址:https://blog.csdn.net/ztc464728422/article/details/107538418

android 预览和拍照成像方向不一致,android 拍照 预览图与 照片分辨率(可视区域)不一致...相关推荐

  1. android 预览和拍照成像方向不一致,Android相机预览方向深入探究

    原标题:Android相机预览方向深入探究 今日快讯 9月7日,北京市交通委召集各区管理部门和15家共享自行车企业负责人,听取共享自行车投放和管理的意见建议,研究决定并下发通知,暂停在本市新增投放共享 ...

  2. android控制手机强制手机横竖方向,使用android IOIO和安卓手机制作视频遥控小车(控制灯的开关、实时视频传输、方向控制)...

    android IOIO是通过安卓手机的USB接口控制的电路板,通过android IOIO可以不需要太多的硬件知识,通过安卓手机转接的IOIO板控制外围设备,配件有纸盒.L298N电机驱动模块.旧手 ...

  3. android xml显示调整,AndroidStudio中怎么设置xml与预览同时显示?

    Android Studio做程序开发的时候,为了看程序运行结果和修改错误的地方,经常需要修改xml后就切换到预览去查看效果.经常切换很烦,想要同时显示xml与预览界面,下面我们就来看看详细的教程. ...

  4. 安卓调用系统相机拍照并返回,实现图片预览

    安卓调用相机拍照并返回预览及相关类型换(略缩图,画质糊)原图预览参考传送门 一.demo预览 二.xml代码和activity简单代码描述. 三.顺便写几个转换工具方法吧 今年主要在忙新项目,安卓也有 ...

  5. android surfaceview 大小,Android设置SurfaceView任意大小、任意位置、保持预览宽高比与屏...

    Android设置SurfaceView任意大小.任意位置.保持预览宽高比与屏 Android设置SurfaceView任意大小.任意位置.保持预览宽高比与屏显一致 一.任意大小.任意位置 1) 代码 ...

  6. Android 手势检测实战 打造支持缩放平移的图片预览效果(下)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39480503,本文出自:[张鸿洋的博客] 上一篇已经带大家实现了自由的放大缩小图 ...

  7. Android Camera使用OpenGL ES 2.0和GLSurfaceView对预览进行实时二次处理(黑白滤镜)

    第一篇 Android Camera使用OpenGL ES 2.0和GLSurfaceView对预览进行实时二次处理(黑白滤镜) 第二篇 Android Camera使用OpenGL ES 2.0和T ...

  8. Android Camera使用OpenGL ES 2.0和TextureView对预览进行实时二次处理(黑白滤镜)

    本系列教程会有三篇文章讲解Android平台滤镜的实现方式,希望在阅读本文之前先阅读下述第一篇文档,因为第一篇讲过的知识,本文并不会细讲了. 第一篇 Android Camera使用OpenGL ES ...

  9. OpenGL.ES在Android上的简单实践:20-水印录制(预览+透明水印 表情 弹幕 gl_blend)

    OpenGL.ES在Android上的简单实践:20-水印录制(预览 gl_blend) 1.继续画出预览帧 紧接着上篇文章,既然是要画出预览帧,按照之前其他项目的架构组成.我们是通过模型FrameR ...

最新文章

  1. 吴裕雄--天生自然 JAVASCRIPT开发学习:DOM EventListener
  2. C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——遍历和查找
  3. 宏基因组序列物种分类之kraken 1/2和Bracken的使用
  4. 教育园报修系统_【务实活动】“充电”模式强力开启,务实幼教2019暑期小红巾生存教育大培训...
  5. 玩转android studio,玩转AndroidStudioIDE
  6. python公式_Python读取excel文件中带公式的值的实现
  7. 工作效率 工具_我使用的工具加快了我的工作流程,使我的工作效率更高
  8. Oracle的并发多版本 读一致性
  9. iOS APP安全杂谈
  10. YUV422 转换成 RGB
  11. cisco路由器设置时间同步
  12. 给领导干部讲计算机课的开场,学习计算机课程的心得(1)讲课讲稿.pdf
  13. 计算标准偏差c语言,C ++程序计算标准偏差
  14. java 股票数据抓取_慢牛系列一:如何抓取股票数据
  15. 让硬盘灯不再狂闪,调整Win7系统绝技(转)
  16. 生物信息_odds_ratios、Likelihood_Ratios、发病率、frequency
  17. 安卓wifi测速android,WiFi测速管家
  18. 雷神黑武士5代shark评测
  19. 巧用Hosts文件杀掉IE弹出窗口(转)
  20. 计算机科学与技术专业论文定题,计算机科学与技术毕业论文题目(个).doc

热门文章

  1. python-画3D图
  2. unity pico3 手柄摇杆控制物体移动和旋转
  3. 漫威《黑豹2:瓦坎达万岁》经历坎坷,近期终于恢复制作
  4. python中的函数 - function
  5. RabbitMQ:消费者ACK机制、生产者消息确认
  6. WPS:将彻底关闭广告
  7. 如何成为一个漏洞赏金猎人
  8. python 7-33 修理牧场 (25 分) PTA
  9. 解空间树和搜索空间树
  10. Layer 图层圆角、边框 、底纹其他常用操作