关于camera图像拉伸变形的问题
2014-10-23 14:53
155 查看
关于camera图像拉伸变形的问题
最近项目里要用到camera,少不了拍照功能,前期的做法是把surfaceview设置成屏幕大小,得到surfaceview的宽高比(就是屏幕的宽高比)LayoutParams params = surfaceView.getLayoutParams(); Point p = DisplayUtil.getScreenMetrics(this); Log.i(TAG, "screen: w = " + p.x + " y = " + p.y); params.width = p.x; params.height = p.y; surfaceView.setLayoutParams(params);根据这个比例去找pitctureSize和previewSize的比例
Size pictureSize = CamParaUtil.getInstance(mCamera).getPropPictureSize( mParams.getSupportedPictureSizes(), 800); mParams.setPictureSize(pictureSize.width, pictureSize.height); Size previewSize = CamParaUtil.getInstance(mCamera).getPropPreviewSize( mParams.getSupportedPreviewSizes(), mPreviwRate, 400); mParams.setPreviewSize(previewSize.width, previewSize.height);
public Size getPropPreviewSize(List<Camera.Size> list, float th, int minHeight){ Collections.sort(list, sizeComparator); int i = 0; for(Size s:list){ if((s.height >= minHeight) && equalRate(s, th)){ Log.i(TAG, "PreviewSize:w = " + s.width + "h = " + s.height); break; } i++; } if(i == list.size()){ i = 0;//如果没找到,就选最小的size } return list.get(i); } public Size getPropPictureSize(List<Camera.Size> list, float th, int minHeight){ Collections.sort(list, sizeComparator); int i = 0; for(Size s:list){ if((s.height >= minHeight) && equalRate(s, th)){ Log.i(TAG, "PictureSize : w = " + s.width + "h = " + s.height); break; } i++; } if(i == list.size()){ i = 0;//如果没找到,就选最小的size } return list.get(i); } public boolean equalRate(Size s, float rate){ float r = (float)(s.width)/(float)(s.height); if(Math.abs(r - rate) <= 0.03) { return true; } else{ return false; } }以上的做法是参照yanzi大神做的,但是发现在一些比例不是主流(16:9/4:3)的手机上没用,图像还是拉伸的,所以就得换个思路了。
后来发现一篇文章点击打开链接,先得到pitctureSize,再根据pitctureSize的宽高比去确定surfaceView大小,以及previewSize的宽高比
根据这个思路,在以前的代码上做修改变成
public Size getPropPreviewSize(List<Camera.Size> list, float th, int minHeight){ Collections.sort(list, sizeComparator); int i =0; for(Size s:list){ if((s.height >= minHeight) && equalRate(s, th)){ Log.i(TAG, "PreviewSize:w = " + s.width + "h = " + s.height); break; } i++; } if(i == list.size()){ i = 0; } return list.get(i); } public Size getPropPictureSize(List<Camera.Size> list, int minHeight){ Collections.sort(list, sizeComparator); int i = 0; for(Size s:list) { if(s.height>minHeight) { Log.i(TAG, "PictureSize = " + s.width + "h = " + s.height); break; } i++; } return list.get(i); } public boolean equalRate(Size s, float rate){ float r = (float)(s.width)/(float)(s.height); if(Math.abs(r - rate) <= 0.03) { return true; } else{ return false; } }目前基本上解决问题了。
相关文章推荐
- Android Camera setRecordingHint(true)函数 在部分手机上的问题,例如拉伸,变形
- 基于 face++的人脸检测,解决了 camera 预览变形,图像方向不对等问题.
- 关于静态图像生成句子描述的问题
- 关于图像绘制并输出的问题,大家帮忙看看
- 关于科学家首次捕获脑细胞在刺激反应下产生的图像的问题
- 关于变形的背包问题的答案(C版)
- Matlab关于批量读取和存储图像这类问题的经验分享
- 关于条带引用图像参数集的问题
- 关于phoneGap camera照片放置的位置问题
- 关于数字图像处理中灰度化的问题
- 关于图像离散区域剔除算法的 优化问题-待发送的回复和图片
- 关于图像处理的一点问题
- 关于修改图像DPI的问题,生成缩略图程序优化
- 关于phoneGap camera照片放置的位置问题
- 关于多边形内点数问题的一些变形
- 关于用FFMPEG截取视频图像保存为BMP图像颠倒及颜色不正常的问题
- 关于MATLAB图像相关性分析的问题
- 用flash获取摄像头照出来的图像变形的问题解决方法
- 关于cout,wcout输出的测试,以及printf,wprintf 输出中文,内存中直接输出图像给网页问题
- 关于 MFC 绘制 JPG图像 问题 -- 无敌使用fread 获取图像到内存中