Android:Camera1/Camera2预览滤镜渲染和拍照后的图像滤镜渲染-我自己的学习日记(建议直接翻到最底部看如何操作)

本文记录了从Camera到Camera2包的图像渲染实践,包括预览、手势操作及拍照后图像渲染的过程。详细比较了Camera1与Camera2的区别,并分享了使用TextureView、GLSurfaceView和GPUImage进行图像渲染的经验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Camera/Camera2预览渲染和拍照后的图像渲染


题外话:最开始我用的是Camera包,因领导要求,我才使用的Camera2包,这两个包是天差地别!!!千万不能拿Camera的思维去写Camera2。Camera2是我最近才重构的,使用时可能问题比较大。
Camera1和Camera2是两个完全不一样的东西!!!
Camera1和Camera2是两个完全不一样的东西!!!
Camera1和Camera2是两个完全不一样的东西!!!

我这是在公司开发的所以不能放源码,只能写个思路!!!!
这算是我今天4月份实习期时的一份小笔记吧,因为最近(7月)项目又双叒叕重构了,来写一下我是怎么完成的😀。
我今年实习的时候做的项目,不方便贴源码,但可以在这里分享一下制作过程。

那么我先从Camera开始说起:

  1. Camera+Sureface:直接上链接吧
    Sureface不支持预览内容可随旋转变换而变化哦!所以得换
    当我跑起来的时候,此时需要可预览、手势操作(平移,旋转,缩放)和拍照后,带我入门的帅气小哥(师傅)看我的呈现画面需要手势操作即推荐我用TextureView,我重构成了↓

  2. Camera+TextureView:直接上链接吧
    TextureView支持预览内容可随旋转变换而变化。
    当我跑起来的时候且完成了预览、手势操作和拍照,此时需要预览渲染的预览方式,我又重构成了↓

  3. Camera+GLSurfaceView:直接上链接吧,但这仅仅是完成预览
    当我需要完成预览渲染不得不用到GLSurfaceView,因为需要渲染预览画面,所以需要OPENGL ES2.0(很复杂,这玩意太多东西要记了,我也优点云里雾里的)了,此时我再基础上完善成了↓

  4. 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"
    看到这一行东西,我知道我找了这么久的问题终于解决了,现在去修改一下就完事了
  • 那么每次都希望我不要再回来添加重构并更新该文章了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值