Android学习【1】解决android摄像头预览的变形问题
2015-08-20 20:29
459 查看
今天开始弄安卓摄像头开发,开始比较顺利,成功实现了摄像头预览拍照的问题,发现预览时SurfaceView 出现了变形的问题,拍照保存图像后也有相应的问题,于是各种网上查找以及分析api。
最终发现api中使用getOptimalPreviewSize这个函数解决了变形的问题。
核心代码如下:<span style="white-space:pre"> </span>List<Camera.Size> sizes = myParameters.getSupportedPreviewSizes(); //获取系统的size集合
Camera.Size optimalSize = getOptimalPreviewSize(sizes, mySurfaceView.getHeight(), mySurfaceView.getWidth()); //根据surfaceview控件的比例选择size
myParameters.setPreviewSize(optimalSize.width, optimalSize.height); //进行size设置
第一次发帖~~如有不足欢迎各位大神指导~~~
最终发现api中使用getOptimalPreviewSize这个函数解决了变形的问题。
private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) { final double ASPECT_TOLERANCE = 0.1; double targetRatio = (double) w / h; if (sizes == null) return null; Size optimalSize = null; double minDiff = Double.MAX_VALUE; int targetHeight = h; // Try to find an size match aspect ratio and size for (Size size : sizes) { double ratio = (double) size.width / size.height; if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue; if (Math.abs(size.height - targetHeight) < minDiff) { optimalSize = size; minDiff = Math.abs(size.height - targetHeight); } } // Cannot find the one match the aspect ratio, ignore the requirement if (optimalSize == null) { minDiff = Double.MAX_VALUE; for (Size size : sizes) { if (Math.abs(size.height - targetHeight) < minDiff) { optimalSize = size; minDiff = Math.abs(size.height - targetHeight); } } } return optimalSize; }通过这个函数自动获取最适宜的长宽比例,然后通过setPreviewSize将获取到的size进行设置就解决啦~~~
核心代码如下:<span style="white-space:pre"> </span>List<Camera.Size> sizes = myParameters.getSupportedPreviewSizes(); //获取系统的size集合
Camera.Size optimalSize = getOptimalPreviewSize(sizes, mySurfaceView.getHeight(), mySurfaceView.getWidth()); //根据surfaceview控件的比例选择size
myParameters.setPreviewSize(optimalSize.width, optimalSize.height); //进行size设置
第一次发帖~~如有不足欢迎各位大神指导~~~
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories