在日常开发中,我们的APP中经常会有拍照的功能,很多的产品经理会要求把拍照和拍照后编辑的体验弄成和微信一样。
先来看看微信的拍照界面和编辑界面
微信拍照的两个优点 :1.响应速度快,从点击拍照按钮,到编辑界面出来你 几乎无延迟。
2.编辑界面的图片和预览界面毫无差别,所见即所得
今天就讲讲如何实现速度快和照片无差别
先来看一下camera2的拍照 Android 使用 Camera2 完成预览和拍照 - 走看看
camera2拍照是通过imageReader实现照片保存的
这个方式通常会有一个问题就是照片的处理保存需要很长的时间,而且需要精确的控制每个手机的分辨率,否则很容易出现拍完照展示出来的图片和预览的不一致 ,中间有明显的变化过程
再来看看cameraX,Android的camerax预览拍照_Jason_Lee155的博客-CSDN博客_android 相机预览拍照
cameraX拍照比较简单,
通过imageCapture 可以配置照片的比例,质量 ,方向等,但是也是存在照片生成时间长,预览和实际得到的照片存在一定比例的缩放问题。
可见传统的方案都多少有问题。。。。。这就是我们今天要说的问题
实际上在cameraX使用的PreviewView和camera2中使用的TextureView中 都有gitBitmap()这个方法
这个方法就是获取当前预览的瞬时图像,那我们的代码完全可以这样写
当点击按钮的时候,直接将当前预览的一帧图像,保存成一张照片
如果需要编辑,则直接将bitmap 显示到编辑的界面上,编辑完了再保存到文件中
这样就能做到点击拍照按钮以后瞬时反应,且图像跟预览的毫无差别,实现类似微信的拍照效果
但是这个方法只针对于固定需求,因为这样拿到的图像,生成照片质量是比较差的,需要高质量的照片还是需要等待,这也是微信拍照编辑出来的照片质量比较差的原因
好了 今天就到这里了,希望能帮到大家