热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

解决android自定义camera变形的问题

主要是因为surfaceview的显示大小和camera预览Size不匹配导致的。下面这一段,我也是借鉴别人然后修改传入的surfaceview宽高位置就可以了。p

主要是因为surfaceview的显示大小和camera预览Size不匹配导致的。

下面这一段,我也是借鉴别人然后修改传入的surfaceview宽高位置就可以了。

parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);List sizeList = parameters.getSupportedPreviewSizes();//获取所有支持的camera尺寸Log.d("jxd","optionSize : mSurfaceView "+mSurfaceView.getWidth()+" * "+mSurfaceView.getHeight());Camera.Size optionSize = getOptimalPreviewSize(sizeList, mSurfaceView.getHeight(), mSurfaceView.getWidth());//获取一个最为适配的camera.sizeLog.d("jxd","optionSize : "+optionSize.width+" * "+optionSize.height);parameters.setPreviewSize(optionSize.width,optionSize.height);//把camera.size赋值到parametersmCamera.setParameters(parameters);//通过SurfaceView显示预览mCamera.setPreviewDisplay(mHolder);//开始预览mCamera.startPreview();

寻找合适的size

/*** 解决预览变形问题* @param sizes* @param w* @param h* @return*/private Camera.Size getOptimalPreviewSize(List sizes, int w, int h) {final double ASPECT_TOLERANCE = 0.1;double targetRatio = (double) w / h;if (sizes == null) return null;Camera.Size optimalSize = null;double minDiff = Double.MAX_VALUE;int targetHeight = h;// Try to find an size match aspect ratio and sizefor (Camera.Size size : sizes) {double ratio = (double) size.width / size.height;if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue;if (Math.abs(size.height - targetHeight)


推荐阅读
author-avatar
C3calm_daidai_649
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有