opengl fbo离屏渲染,处理Android截屏卡顿太久。

Android SurfaceTexture说明 Android SurfaceTexture、EGLImage、GL_TEXTURE_EXTERNAL_OES、外部纹理、YUV等相关技术 阅读详情

1.首先说明一下,只做参考。项目记录。由于项目需求,涉及到摄像头截图。当然了是GLSurfaceView了。

2.自己定义一个Renderer实现GLSurfaceView.Renderer,在onDrawFrame函数里面操作。

相信大部分人都是在这里面开启异步进行截图。使用这个函数,或者其他

GLES20.glReadPixels(0, 0,width_surface, height_surface,GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, intBuffer);

在此之前,楼主也是这样操作,发现截图会卡顿,每个机子卡顿时间不一样。但大多数要300多ms。或更久。

3.不想啰嗦了,上代码。

4.定义两对象。

 private int[] fFrame = new int[1];
 private int[] fTexture = new int[1];
5.开启的函数,这里是用GLES20。

 private void bindfbo() {
        GLES20.glGenFramebuffers(1, fFrame, 0);

        GLES20.glGenTextures(1, fTexture, 0);
        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, fTexture[0]);
        GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, width_surface, height_surface,0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, null);

        GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
        GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
        GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
        GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);

        GLES20.glBindFramebuffer(GL_FRAMEBUFFER, fFrame[0]);
        GLES20.glFramebufferTexture2D(GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0,GLES20.GL_TEXTURE_2D, fTexture[0], 0);

        int status= GLES20.glCheckFramebufferStatus(GLES20.GL_FRAMEBUFFER);
        if(status !=GLES20.GL_FRAMEBUFFER_COMPLETE) {
            throw new RuntimeException("status:"+status+", hex:"+Integer.toHexString(status));
        }
}
6.每一次开启后要解绑

private void unbindfbo() {
        GLES20.glBindFramebuffer(GL_FRAMEBUFFER, 0);
        GLES20.glDeleteTextures(1, fTexture, 0);
        GLES20.glDeleteFramebuffers(1, fFrame, 0);
    }
7.注意事项:

不要每一次都开启。用按钮写个接口或者布尔值控制,点击就截图。然后解绑。

来张截图吧。





Android图像处理系列:离屏GL线程的创建和使用 在Android上做图片或视频帧处理一般有两种方式,一种是在CPU上运行,比如用Matrix类对bitmap做平移、缩放、旋转等变换操作,用OpenCV对图片做格式转换等;另一种是在GPU上运行,一般是通过GLSurfaceView在屏幕上申请一块Surface,调用OpenGL ES API对图片纹理做处理。CPU的图片处理耗时一般是GPU的数十倍,在实时性要求比较高的场景下还是需要用GLSurfaceView来做处理。 OpenGL ES API的调用和执行需要OpenGL上下文环境,而创建OpenGL 阅读详情

相关推荐

通过一个例子理解EGL和OpenGL的离屏刷新

EGL是什么? EGL 是 OpenGL ES 渲染 API 和本地窗口系统(native platform window system)之间的一个中间接口层,它主要由系统制造商实现,为了让OpenGL ES能够绘制在当前设备上,我们需要EGL作为OpenGL ES与设备的桥梁。在Android中我们要使用OpenGL那么必须先初始化EGL环境 初始化EGL环境 获取EGL实例 egl = (...

Jesse_liao的博客 4126

Android OpenGL ES 学习(十三) -离屏渲染FBO(截图)RBO, OES转 FBO

最近遇到需要截图的功能,发现直接使用 GLES30.glReadPixels 竟然达到了2s多,且会阻塞卡顿。因此有必要学习一下 FBO 了。

夏至的稻穗的博客 5078

Android OpenGLES2.0开发(十):FBO离屏渲染

FBO(Frame Buffer Object)即帧缓冲区对象,实际上是一个可添加缓冲区的容器,可以为其添加纹理或渲染缓冲区对象(RBO)。FBO可以让我们的渲染不渲染到屏幕上,而是渲染到离屏Buffer中。可以理解为将OpenGL ES绘制的图像内容输出到一块内存中,而我们可以对这块内存进行多次绘制。当然这块内存中的数据也可保存到本地SD卡中,也可重新绘制到屏幕上用于显示。FBO是一个容器,自身不能用于渲染,需要与一些可渲染的缓冲区绑定在一起,像纹理或者渲染缓冲区。

xiaozhiwz的专栏 2253

android 离屏表面 截屏,SurfaceFlinger中的绘制处理

本文梳理SurfaceFlinfer绘制中的三个问题:- 输入:应用送来的图像数据如何更新到纹理,用OpenGL ES (2.0)API绘制出去?- 输出:​OpenGL ES(2.0)渲染输出是如何设置的?- 截屏:OpenGL ES(2.0)离屏渲染是如何实现的?​SF整体逻辑关系图1.SF如何处理输入的UI图像Buffer?更新纹理用了哪些GLESAPI?GLES20RenderEngin...

weixin_42157188的博客 732

Android Camera OpenGL FBO的理解

背景概念: 首先,Android显示系统中,系统默认的渲染器是OpenGL,混合使用skia,各个厂商可能有不同的实现,大部分都是OpenGL。 Android在系统启动时,经过BootLoader启动、kernel启动后,进入第三阶段,init进程会启动一系列的核心进程,其中包括ServiceManager、zygote、OpenGL,OpenGL是显示系统的基础,OpenGL启动之后,就可...

Frakie_Kwok的专栏 1921

使用AndroidScreenCap截取ANdroid设备屏幕

该jar引进之后,调用函数名: context.takeScreenshot(Context context, String fileFullPath) 可以进行截屏

Android view 渲染到GL,Android OpenGL ES从白痴到入门(四):离屏渲染(Pbuffer)

注:涉及太专业的知识请自行保留怀疑态度!一本正经的胡说八道上一节我们只是把情丝斩断了,还是没偷偷摸摸的干点见不得人的事,这节我们就来吧!首先,我们来看EGL创建EGLSurface有三个方法:eglCreateWindowSurface()、eglCreatePbufferSurface()和eglCreatePixmapSurface()。这三者有什么不同呢?WindowSurface顾名思义W...

weixin_28976245的博客 771

NativeGL_demo:此程序使用android native代码实现EGL,并使用SurfaceView作为OpenGL绘图窗口。即可提高图形渲染性能,又可使用java层定义的图形界面

NativeGL_demo 1方案介绍 在实际应用中,经常遇到OpenGL ES渲染性能达不到要求,图像卡顿等GG问题。这时,在不改变平台选型的情况下,选择一个好的方案实现OpenGL渲染很重要。应用程序中使用OpenGL ES共有方案 使用GLSurfaceView作为绘图窗口,使用GLSurfaceView.Renderer实现OpenGL渲染图形,并通过调用android.opengl.GLES20中的API函数实现对图像的渲染 使用GLSurfaceView作为绘图窗口,使用GLSurfaceView.Renderer实现OpenGL渲染图形,和1不一样的是通过JNI接口调用#incl

android开机渲染视频太久,opengl fbo离屏渲染,处理Android截屏卡顿太久。

1.首先说明一下,只做参考。项目记录。由于项目需求,涉及到摄像头截图。当然了是GLSurfaceView了。2.自己定义一个Renderer实现GLSurfaceView.Renderer,在onDrawFrame函数里面操作。相信大部分人都是在这里面开启异步进行截图。使用这个函数,或者其他GLES20.glReadPixels(0, 0,width_surface, height_surface...

weixin_34509784的博客 461

保姆级教程:用ROS2 Humble + Gazebo Classic 从零搭建一个能键盘控制的差分AGV模型

本文提供了一份详细的ROS2 Humble与Gazebo Classic教程,指导用户从零开始搭建一个键盘控制的差分AGV模型。内容涵盖环境配置、Xacro文件设计、Gazebo仿真集成以及键盘控制实现,特别针对常见问题提供解决方案,帮助开发者快速掌握ROS2机器人仿真技术。

weixin_30387423的博客 168

从Level 1到Level 22:手把手带你用Burp Suite通关burp-labs靶场全关卡(附难点解析)

本文详细解析了如何使用Burp Suite通关burp-labs靶场的22个关卡,从基础爆破到复杂编码绕过,涵盖Intruder配置、响应过滤、POST请求处理、MD5爆破等关键技术。特别针对Level 16的三重编码和Level 20的中文响应处理等难点提供实战技巧,帮助渗透测试工程师提升Web安全实战能力。

weixin_28831461的博客 432

OpenGL.ES在Android上的简单实践:23-水印录制(FBO离屏渲染,解决透明冲突,画中画)

OpenGL.ES在Android上的简单实践:23-水印录制(FBO离屏录制,解决透明冲突) 1、水印签名罢工了? 不知道大家有没注意到,之前我们使用MediaCodec录制的视频,水印签名那部分区域还是黑黑的啊(笑哭.jpg)。道理还是之前说过的,原生的Surface默认格式是RGB565,不支持透明通道。我也在20-水印录制提供了解决方案。 第一种就是在shader层使用内置函...

vx number:zzr_admin,拉入技术交流群。 8215

情感分析在金融领域的应用:舆情影响股价预测

我们都知道,股价的波动受到多种因素的影响,而大众的情绪和看法就是其中很重要的一部分。我们在日常生活中都有根据别人的评价来判断事物好坏的经验,在金融市场里,舆情就像是大众对某家公司的集体评价,它能反映出市场参与者的情绪和预期。学习这方面的知识,能帮助投资者更好地把握市场动态,做出更明智的投资决策,无论是个人投资者还是金融机构的分析师,都能从中受益。有一天,你看到某家知名企业被曝光了严重的产品质量问题,新闻铺天盖地,股民们也都在热议纷纷,负面情绪弥漫。这时,你会不会觉得这家公司的股价可能要下跌了呢?

AI 原生应用开发的博客 1145

Android离屏渲染

与iOS同事聊天时聊到圆角会使用离屏渲染的方式绘制,影响性能;Android上有没有不知道,学习了一下整理了这篇文章。Android 圆角与离屏渲染(Offscreen Rendering)一、什么是离屏渲染?离屏渲染是指系统在显示内容前,先渲染到临时缓冲区(Offscreen Buffer),再合成到屏幕的过程。它会增加 GPU 负载,可能导致卡顿、掉帧或耗电增加。二、圆角是否会触发离屏渲染?取决于实现方式实现方案是否离屏渲染?性能影响适用场景❌ 否最优纯色/渐变背景圆角❌ 否最优。

Dengzm94 1927

PyCharm 怎么不升级直接使用Jupyter Notebook

在PyCharm 中需要升级到 PyCharm Professional 版本,才能直接使用 Jupyter Notebook。从截图来看,Jupyter Notebook 已经成功启动,并且正在运行。这将在默认网络浏览器中打开一个新的标签页,显示文件浏览器界面。可以在这里创建和编辑。文件添加到 PyCharm 项目中,并使用纯文本编辑功能进行修改。支持与外部工具集成,可以配置它以调用命令行工具或脚本来启动。,参数可以根据需要设置,工作目录设置为项目根目录。,你仍然可以在本地环境中安装和运行。

Davina_yu的博客 994

Google Earth Engine 实现图像随机森林分类_遥感分类全流程详解

本文将通过一段完整的GEE代码,逐步讲解如何利用Sentinel-2影像和随机森林算法,实现地表覆盖分类。代码包含等关键步骤,适合遥感入门学习!

国科大硕士在读,分享Python/GEE/Matlab/R专业代码实践,涵盖数据分析、算法开发与应用技巧等,以代码会友。 916

Android通过OpenGL截取视频画面

Android通过OpenGL截取视频画面截取视频图片格式转换,因为bitmap的存储格式和从OpenGL中获取到到buffer不一致,所以需要转换一下 截取视频图片 private void getVideoScreenShot(int frameBuffer) { if (!isScreenShot) return; GLES20.glBindFrame...

Jesse_liao的博客 840

Debezium报错处理系列之二十八: Expiring 1 record(s) for test-ts-0:120001 ms has passed since batch creation

Debezium报错处理系列之二十八: Expiring 1 record(s) for test-ts-0:120001 ms has passed since batch creation

zhengzaifeidelushang的博客 3290

Android Opengl es 截屏

/** * Saves the EGL surface to a file. * <p> * Expects that this object's EGL surface is current. * @param file 图片文件 * @param width 图片的宽 * @param height 图片的高 * @throws IOException */ pub...

xingfuyisheng的专栏 1441

智能小车倒车入库功能的实现(python,cpp,ubuntu)

智能小车倒车入库功能的实现(python,cpp,ubuntu)

weixin_62135607的博客 5792

YOLOv11模型改进全攻略:利用轻量化模块实现精度与速度双跃升

如果你在实操中遇到模块替换导致的精度骤降或部署报错,不妨尝试调整轻量化模块的替换比例,或针对性地保留关键层的原始结构。记住,轻量化的核心是“在精度损失可接受的范围内最大化提升效率”,只要结合业务场景灵活取舍,你也能让YOLOv11在资源受限的环境中大放异彩。接下来,我们从模块选型到代码集成,一步步带你打造“轻量且能打”的YOLOv11,真正帮你解决工业落地中的效率与精度痛点。训练过程中关注模型的mAP和推理速度,若精度下降过多,可调整模块替换的比例(如仅替换Backbone的部分卷积层)。

m0_64661770的博客 501

Android OpenGL ES 离屏渲染(offscreen render) C++ 实现

Android OpenGL ES 离屏渲染(offscreen render) 通常在Android上使用OpenGL ES,都是希望把渲染后的结果显示在屏幕上,例如图片处理、模型显示等。这种情况下,只需要使用Android API中提供的GLSurfaceView类和Renderer类,在这两个类提供的初始化、回调函数中设置/编写相应的代码即可。不过,如果不希望把渲染结果显示在屏幕上,也就是所说的离屏渲染(offscreen render),这两个类就帮不上忙了。在此介绍一下如何在Android系统上

3424

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

解决android opengl glReadPixels 慢的问题 三

解决android opengl glReadPixels 慢的问题 三 使用2个pbo效率提上去了,但是我手机分辨率是720p, 或者1080p,我们手机相机使用一般是480x640,这样通过gpu渲染到1080p,然后再去从gpu里边去读,虽然使用了2 个pbo,但是感觉还是浪费系统资源了,那我们怎么能够尽可能使用gpu渲染我最需要的尺寸呢? 那么最好的办

c553110519的专栏 6754

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Android性能优化系列——卡顿优化

就是。我们知道手机的屏幕画面是按照一定频率来刷新的,理论上讲,24 帧的画面更新就能让人眼感觉是连贯的。但是实际上,这个只是针对普通的视频而言。对于一些来说,比如游戏,起码需要 60 帧,30 帧的游戏会让人感觉不适;如果实现不卡顿,则需要在 16ms 内做完所有的操作才不会造成卡顿。

Android 领域开发程序员,希望通过写博客的方式不断的总结提升自己,大家共同进步哦! 1461

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

LearnOpenGL - Android OpenGL ES 3.0 使用 FBO 进行离屏渲染

利用 FBO(Framebuffer Object),我们可以实现离屏渲染。在前面的章节中,当我们调用 glDrawElements 后,手机屏幕上就会显示出绘制的图像。这意味着 OpenGL 将数据直接渲染到了手机屏幕上。通过使用 FBO,我们可以将数据渲染到纹理上,而不是直接渲染到屏幕,这个过程称为离屏渲染。通过离屏渲染,我们可以在最终显示之前对图像进行复杂的处理。这种方法非常有用,比如在后期处理效果(如模糊、HDR、阴影等)中,或者在渲染多个场景以进行纹理贴图、环境映射等操作时。

记录学习的过程 2951

JNI GetMethodID called with pending exception java.lang.NoSuchMethodError

JNI DETECTED ERROR IN APPLICATION: JNI GetMethodID called with pending exception java.lang.NoSuchMethodError: no non-static method "Lxxx;.size()I"

SXH_Android的博客 1万+
上一篇: tablayout 设置下划线宽度。
下一篇: CMakeLists格式。
SXH_Android
博客等级 码龄11年 16粉丝 19原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值