Android 自定义相机surfaceview预览变形问题解决
最近有个需求要自定义相机,这还不简单,GitHub,baidu等等一堆现成的代码,开启cv战斗模式,运行起来就发现,怎么预览的怎么变形了啊,然后各种看前辈们的是怎么解决的,最终顺利解决,分享下我的解决方法
为什么会变形
有没有细心的同学发现,安卓手机的系统相机,设置正方形,标准,还是16:9,照相机的预览界面会跟随你的设置而改变,或者在拍摄视频的时候,设置不同的分辨率也预览界面也会发生改变。之所以会改变就是为了通过改变surfaceview的大小来确保预览不会变形。
屏幕的分辨率是固定的,但是预览的分辨率是可以修改的
打个比方,(以下单位都是px,为了方便理解我们固定手机为竖屏,横向作为宽,纵向作为高)当前预览的分辨率是1280960(4:3)手机屏幕分辨率是19201080(16:9)设置的surfaceview固定的情况下都是宽高都设置为match_parent,那么它的高宽就是屏幕的高宽为1920*1080。就导致我们强行把宽为960像素的图片放到宽度为1080的画布上导致横向就有了一定的拉伸,同理纵向也被从1280拉到了1920,很显然宽度放大了1080/960倍,高度放大了1920/1280倍,这两个值肯定不相等,导致预览变形。