浅析Android Camera开发中的三个尺寸和三种变形 (贡献一个自适配Picturesize和Previewsize的工具类)
来源:互联网 发布:手办买卖吧淘宝店铺 编辑:程序博客网 时间:2024/06/06 05:53
http://blog.csdn.net/yanzi1225627/article/details/17652643
经常听人问Camera开发中,各种变形问题,今天有空就在此梳理总结下。
三个尺寸:
1、Surfaceview的尺寸
Surfaceview是用来预览Camera的,当它全屏时就是Screen的大小。
2、Picturesize的尺寸
这是拍照后的PictureSize尺寸。
3、Previewsize的尺寸
这是预览时帧数据的尺寸。
三种变形:
1、预览画面的物体长宽失真。原因是Surfaceview和Previewsize的长宽比率不一致,就会导致预览画面上失真。因为camera在显示时会将预览帧数据缩放成Surfaceview大小,当比率不一致必然会物体变形。至于这个缩放算法可能不同手机会有区别。
2、拍照后照片上物体变形。
3、点击拍照瞬间,预览画面上会突然变形然后恢复到正常预览。
2、3两种变形都是因为Previewsize和Picturesize的长宽比率不一致所致。总之一句话,为了保证图片不是真,要保证预览Surfaceview、Previewsize、Picturesize的长宽比率要一直。如果Surfaceview是全屏的话,要获取屏幕长和宽得到比率。
为此我写了一个工具类,获得合适的Picturesize和Previewsize,名字为:MyCamPara.Java。
对上面这个工具类注释如下:
1,是个单例模式类。调用示例:
2,程序首先对预览尺寸的list进行升序排序,因为实际中发现,有的手机提供的是升序有的是降序。
3,通过equalRate(Size s, float rate)保证Size的长宽比率。一般而言这个比率为1.333/1.7777即通常说的4:3和16:9比率。
4、在getPreviewSize()函数里增加判断if((s.width > th) && equalRate(s, 1.33f)),除保证比率外,还保证用户需要设置的尺寸宽度最小值。这个大家根据需要随便改。
如果您觉得笔者在认真的写博客,请为我投上一票,谢谢大家。
CSDN2013博客之星评选:
- 顶
- 21
- 踩
- 3
- 浅析Android Camera开发中的三个尺寸和三种变形 (贡献一个自适配Picturesize和Previewsize的工具类)
- 浅析Android Camera开发中的三个尺寸和三种变形 (贡献一个自适配Picturesize和Previewsize的工具类)
- 浅析Android Camera开发中的三个尺寸和三种变形 (贡献一个自适配Picturesize和Previewsize的工具类)
- 浅析Android Camera开发中的三个尺寸和三种变形 (贡献一个自适配Picturesize和Previewsize的工具类)
- 浅析Android Camera开发中的三个尺寸和三种变形 (贡献一个自适配Picturesize和Previewsize的工具类)
- 浅析Android Camera开发中的三个尺寸和三种变形 (贡献一个自适配Picturesize和Previewsize的工具类)
- 浅析Android Camera开发中的三个尺寸和三种变形 (贡献一个自适配Picturesize和Previewsize的工具类)
- Android Camera PreviewSize PictureSize SurfaceView之间的关系
- previewsize,picturesize,surfaceviewsize
- camera获取的Previewsize重复
- Android精确适配不同的dpi和屏幕尺寸(附dimens按比例变化数字的工具类)
- Android精确适配不同的dpi和屏幕尺寸(附dimens按比例变化数字的工具类)
- Android中的单位和尺寸
- android camera中的预览图片变形的解决办法
- android camera中的预览图片变形的解决办法
- Android平板开发精确适配不同的dpi和屏幕尺寸
- Android平板开发精确适配不同的dpi和屏幕尺寸
- Android平板开发精确适配不同的dpi和屏幕尺寸
- TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute
- vue-cli使用方法
- ANDROID STUDIO系列教程二--基本设置与运行
- python MARKER_EXPR = originalTextFor(MARKER_EXPR())("marker") TypeError: __call__() takes exactly 2
- JavaScript之DOM详细使用实例
- 浅析Android Camera开发中的三个尺寸和三种变形 (贡献一个自适配Picturesize和Previewsize的工具类)
- TCP/IP详解学习笔记(5)-IP选路,动态选路,和一些细节
- 几款模板引擎的性能对比
- Find Mode in Binary Search Tree
- shell基础学习
- TCP/IP详解学习笔记(6)-UDP协议
- SQL建立索引
- salesforce标准对象(2)
- 根据价格变化自动识别极值点策略