Camera/Camera2预览渲染和拍照后的图像渲染
题外话:最开始我用的是Camera包,因领导要求,我才使用的Camera2包,这两个包是天差地别!!!千万不能拿Camera的思维去写Camera2。Camera2是我最近才重构的,使用时可能问题比较大。
Camera1和Camera2是两个完全不一样的东西!!!
Camera1和Camera2是两个完全不一样的东西!!!
Camera1和Camera2是两个完全不一样的东西!!!
我这是在公司开发的所以不能放源码,只能写个思路!!!!
这算是我今天4月份实习期时的一份小笔记吧,因为最近(7月)项目又双叒叕重构了,来写一下我是怎么完成的😀。
我今年实习的时候做的项目,不方便贴源码,但可以在这里分享一下制作过程。
那么我先从Camera开始说起:
-
Camera+Sureface:直接上链接吧
Sureface不支持预览内容可随旋转变换而变化哦!所以得换
当我跑起来的时候,此时需要可预览、手势操作(平移,旋转,缩放)和拍照后,带我入门的帅气小哥(师傅)看我的呈现画面需要手势操作即推荐我用TextureView,我重构成了↓ -
Camera+TextureView:直接上链接吧
TextureView支持预览内容可随旋转变换而变化。
当我跑起来的时候且完成了预览、手势操作和拍照,此时需要预览渲染的预览方式,我又重构成了↓ -
Camera+GLSurfaceView:直接上链接吧,但这仅仅是完成预览
当我需要完成预览渲染不得不用到GLSurfaceView,因为需要渲染预览画面,所以需要OPENGL ES2.0(很复杂,这玩意太多东西要记了,我也优点云里雾里的)了,此时我再基础上完善成了↓ -
Camera+GLSurfaceView并完成画面渲染:直接上链接吧
这篇是来渲染MediaPlayer的,可以自己改成Camera,自己操作吧很简单的换几个代码的事,此时图像渲染的问题就大功告成啦。!!!此时我发现GLSurfaceView的旋转的方法为gl.glRotatef(angle, x, y, z)有部分延迟,有点不太优秀,用过就知道啦,缩放和平移的手势就没有问题了。
!!!以上是仅仅完成了对GLSurfaceView画布的预览渲染,并没有完成拍照出来的图像也被渲染(拍照出来的图是依旧是原图)。
正值7月酷暑,我得从Camera2开始说起了:
-
Camera2+Sureface:Sureface与我要有的旋转手势不符,我就没尝试了
-
7-13更新: Camera2+TextureView: 百度一抓一大把,我完成了预览、手势和拍照。
此时的我重构完,发现这个Camera2自带这些预览渲染啊wocao!!!(http://www.chinaoc.com.cn/p/1221429.html)贼开心,信誓旦旦的说我可以尽快交出升级后的项目了,但我发现这些API不知道为什么基本是无效的… 给我整懵了,我搜了资料,又下了十几分demo都是无效的,所以又到重构的时间了↓ -
7-18更新:直到我找到了 GPUImage ,差点都快哭了出来,又是符合Camera2开发,又是可以预览渲染也能画面拍出来渲染!!!
目前正在重构中!!!(旋转还是有点问题,我再想想办法,最简单的办法就是和领导提要求:能不能不要旋转哈哈哈哈哈哈,那当然是不可能的啦) -
7-21更新:项目合并完了!!GPUimage Demo的图像输出的大小是当前GPIImageView的长宽,这demo中分别有这亮度,饱和,色温的滤镜,现在搞一个新的滤镜:将亮度,饱和,色温这三个值控制成的滤镜变为一个,正在查资料…令人脑壳痛的着色器语言
-
7-22更新:在GPUimage基础上配合使用了 颜色矩阵(ColorMatrix) 和glsl语言来 并且使用了三个值来写出了新的滤镜了~ 代码有空上班的时候再放,具体也是参照之前的:直接上链接吧,现在还是要搞最开始的旋转问题了 真是脑壳疼
以上基本都能准确实现滤镜功能了,以下的更新是要适配手指触控旋转的一份更新。
- 7-31更新:这几天都忙别的项目,抽空在找摄像头内容的旋转。终于可以来最后一次更新这篇文章了哈哈哈哈!GLSurfaceView的setRotate()与GLTextureView的的setRotate()是两个东西,而我一直在用GLSurfaceView的,并且GPUimage的包是默认使用GLSurfaceView的所以很头疼这玩意怎么改成GLTextureView,今天闲着没事干在看UI里的一些东西 突然看到一行:
app:gpuimage_surface_type="texture_view"
看到这一行东西,我知道我找了这么久的问题终于解决了,现在去修改一下就完事了 - 那么每次都希望我不要再回来添加重构并更新该文章了