Android OpenGL 渲染相机预览画面显示体系

这篇具有很好参考价值的文章主要介绍了Android OpenGL 渲染相机预览画面显示体系。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OpenGL能进行高效得渲染图形图像,并支持各种复杂的特效和动画。

而在 Android 当中,运用的是OpenGL ES,它是OpenGL的一个轻量级版本,专门用于在移动设备、游戏控制台、嵌入式系统等嵌入式环境中使用。

它可以做相机滤镜或者图片滤镜的效果,以相机滤镜为例:

Android OpenGL 渲染相机预览画面显示体系

首先 Camera 把摄像头收集到的数据传给 SurfaceTexture,SurfaceTexture 将数据转换为OpenGL  ES可用的纹理,并将其更新到绑定的纹理对象中,OpenGL 根据纹理ID获取到纹理对象后,渲染成帧数据,再通过 EGL 显示在 Surface 上。


纹理:是一种可以被 OpenGL 识别和使用的渲染数据源

纹理对象:是一个用于存储和处理纹理数据的对象

纹理ID:用于标识和操作这个纹理对象的唯一编号,类似于身份证号码

SurfaceTexture:将数据转换为OpenGL ES可用的纹理,并将其更新到绑定的纹理对象中,以供OpenGL ES进行渲染和显示

EGL:它是OpenGL ES与底层窗口系统(如Android、Linux等)之间的中间层,用于管理与窗口系统的交互以及OpenGL ES渲染表面的创建、绑定和显示等操作。


关于 GLSurfaceView: 

GLSurfaceView是Android SDK提供的一个用于显示OpenGL ES图形渲染结果的视图,其主要特点是可以在独立的线程上进行OpenGL渲染,以避免卡顿和界面卡死的问题。最主要是提供EGLOpenGL ES环境的创建和管理,这些环境是OpenGL渲染的基础。

详细的逻辑可以参考:https://github.com/xufuji456/FFmpegAndroid中的相机滤镜部分文章来源地址https://www.toymoban.com/news/detail-423097.html

到了这里,关于Android OpenGL 渲染相机预览画面显示体系的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 利用Pygame实时显示Carla中RGB相机的画面

      关于显示Carla中RGB相机的画面,我找到的几乎都是使用cv来显示的画面的,但是经过我自己尝试发现,利用cv来显示的画面帧数非常低,画面及其不流畅。如果你尝试过Carla自带的demo就会发现demo中用pygame制作窗口显示的画面就十分流畅,所以我就试着模仿demo利用pygame来显

    2024年02月16日
    浏览(29)
  • Android OpenGL EGL使用——自定义相机

    如果要使用OpenGl来自定义相机,EGL还是需要了解下的。 可能大多数开发者使用过OpengGL但是不知道EGL是什么?EGL的作用是什么?这其实一点都不奇怪,因为Android中的GlSurfaceView已经将EGL环境都给配置好了,你一直在使用,只是不知道他的存在罢了。 很多人可能在使用OpenGl ES渲

    2024年01月22日
    浏览(31)
  • Android 画面显示流程三

    画面更新流程 从底层的显示硬件,SOC和DDIC的接口,linux和Userspace的图形接口以及APP与SurfaceFlinger,HWC service三者关系,了解了帧数据流动所经过的关键节点,并重点讨论了帧buffer是如何管理的,以及在流动过程中是如何做到同步的。接下来我们将从应用侧角度从山到下看一下应

    2024年02月13日
    浏览(65)
  • Android 画面显示流程二

    BufferQueue BufferQueue要解决的是生产者的同步问题,应用程序生产画面,SurfaceFlinger消费画面,SurfaceFlinger生产画面而HWCService消费画面。用来存储这些画面的存储区我们称其为帧缓冲区buffer,下面我们以应用程序作为生产者,SurfaceFlinger作为消费者为例来了解一下BufferQueue的内部设

    2024年02月13日
    浏览(47)
  • Android 实现相机(CameraX)预览

    CameraX 是一个 Jetpack 库,旨在帮助您更轻松地开发相机应用。 对于新应用,我们建议从 CameraX 开始。它提供一致且易于使用的 API,适用于绝大多数 Android 设备,并向后兼容 Android 5.0(API 级别 21)。 CameraX 支持大多数常见的相机用例: 预览 :在屏幕上查看图片。 图片分析 :

    2024年02月15日
    浏览(28)
  • Android OpenGL ES 学习(十三) -离屏渲染FBO(截图)RBO, OES转 FBO

    Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学习(三) – 绘制平面图形 Android OpenGL ES 学习(四) – 正交投屏 Android OpenGL ES 学习(五) – 渐变色 Android OpenGL ES 学习(六) – 使用 VBO、VAO 和 EBO/IBO 优化程序 Android OpenGL ES 学习(七) –

    2024年02月12日
    浏览(26)
  • Android OpenGLES + Camera1 相机预览

    if (isCreate) { return; } onCreatePre(); onClearColor(); onInitBlend(); onInitVertexBuffer(); onInitCoordinateBuffer(); onInitVbo(); onInitProgram(); onCreateAfter(); isCreate = true; } @Override public void onChange(int width, int height) { if (isChange) { return; } onChangePre(); setWidth(width); setHeight(height); onViewport(); onInitFbo(); onChangeAfter(

    2024年04月12日
    浏览(34)
  • 一行代码解决Android相机预览镜像的问题

    开发Camare相关应用的时候, 预览图像是发现,使用前置摄像头的时候,预览出来的图像是左右相反, 并没有像照镜子一样的镜像效果. 为了解决这一问题,可是一番煞费苦心啊! 最终黄天不负有心人, 找到了解决方案. 废话不多说,直接上代码: 重点重点重点!!! parameters.set(“preview-fli

    2024年02月13日
    浏览(38)
  • Android OpenGLES + Camera1 相机预览(2)

    private void checkRenderThreadState() { if (mGLThread != null) { throw new IllegalStateException( “setRenderer has already been called for this instance.”); } } 也就是说,设置了 Renderer 后,就不能更换了,那么如果有需求:本来是渲染一个灰度滤镜的,当想变换其他滤镜的时候,又不能重新设置 Renderer ,此

    2024年04月25日
    浏览(29)
  • 十分钟实现 Android Camera2 相机预览

    因为工作中要使用 Android Camera2 API ,但因为 Camera2 比较复杂,网上资料也比较乱,有一定入门门槛,所以花了几天时间系统研究了下,并在 CSDN 上记录了下,希望能帮助到更多的小伙伴。 Camera2 API 的包名是 android.hardware.camera2 ,是 Android 5.0 后推出的一套调用摄像头设备的接口

    2024年02月13日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包