自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

字节流动

技术、认知、生活与感悟

  • 博客(136)
  • 收藏
  • 关注

原创 FFmpeg 开发(12):Android FFmpeg 实现带滤镜的微信小视频录制功能

该文章首发于微信公众号:字节流动FFmpeg 开发系列连载:FFmpeg 开发(01):FFmpeg 编译和集成FFmpeg 开发(02):FFmpeg + ANativeWindow 实现视频解码播放FFmpeg 开发(03):FFmpeg + OpenSLES 实现音频解码播放FFmpeg 开发(04):FFmpeg + OpenGLES 实现音频可视化播放FFmpeg 开发(05):FFmpeg + OpenGLES 实现视频解码播放和视频滤镜FFmpeg .

2021-03-21 21:45:31 15059

原创 字节流动 OpenGLES 技术交流群来啦

字节流动 OpenGLES 技术交流群之前根据自己学习 OpenGLES 的心路历程,将自己的学习过程和在项目中的简单应用记录下来,形成了一个 Android OpenGLES 系统性的学习专辑。Android OpenGL ES 从入门到精通系统性学习教程很荣幸获得一些大佬的推荐,然后陆陆续续有不少朋友加我好友,强烈要求我建一个相关的技术交流群。刚好最近有精力折腾这个事情,索性就建了一个技术交流群,欢迎扫码进群:技术交流群主要讨论 OpenGL ES 相关技术问题,大家有遇到相关的疑问、难题,

2020-09-11 18:39:41 1330 2

原创 Android OpenGL ES FFmpeg 从入门到精通系统性学习教程

为什么要写这个教程目前这个 OpenGL ES 极简教程的更新暂时告一段落,说是教程,其实自知有种吹嘘的味道,很荣幸获得了阮一峰老师的推荐。因为在工作中频繁使用 OpenGL ES 做一些特效、滤镜之类的效果,加上平时学到的的知识点也比较细碎,就想着去系统地学习下 OpenGL ES 相关开发知识,并将学习过程记录下来。另外,这个 Android OpenGL ES 极简教程也是为音视频开发做准备的,它的内容涵盖了 OpenGL ES 3.0 的核心知识点,包含了 GLES3.0 的新特性,如 Tra

2020-06-19 13:07:18 28576 5

原创 一文掌握 YUV 图像的基本处理

原创文章,未经授权禁止转载YUV 的由来YUV 是一种色彩编码模型,也叫做 YCbCr,其中 “Y” 表示明亮度(Luminance),“U” 和 “V” 分别表示色度(Chrominance)和浓度(Chroma)。YUV 色彩编码模型,其设计初衷为了解决彩色电视机与黑白电视的兼容问题,利用了人类眼睛的生理特性(对亮度敏感,对色度不敏感),允许降低色度的带宽,降低了传输带宽。在计算...

2019-06-28 18:49:48 22798 4

原创 OpenGL 多重采样抗锯齿(MSAA,Multisample Anti-Aliasing)

多重采样抗锯齿(MSAA,Multisample Anti-Aliasing)是一种用于减少图形渲染中锯齿(aliasing)效应的技术。

2024-04-15 20:29:11 55

原创 OpenGL ES 面试高频知识点

VBO(Vertex Buffer Object)是指顶点缓冲区对象,VAO(Vertex Array Object)是指顶点数组对象。OpenGL ES 2.0 编程中,用于绘制的顶点数组数据首先保存在 CPU 内存,在调用 glDrawArrays 或者 glDrawElements 等进行绘制时,需要将顶点数组数据从 CPU 内存拷贝到显存。但是很多时候我们没必要每次绘制的时候都去进行内存拷贝,如果可以在显存中缓存这些数据,就可以在很大程度上降低内存拷贝带来的开销。

2024-04-03 19:43:31 404

原创 OpenGL 实现“人像背景虚化“效果

手机上的人像模式,也被人们称作“背景虚化”或 ”双摄虚化“ 模式,也称为 Bokeh 模式,能够在保持画面中指定的人或物体清晰的同时,将其他的背景模糊掉。突出画面的主体部分,主观上美感更强烈。,例如美颜、肤色优化以及基于深度信息的虚化等,最终提供清晰突出的人像照片。所以,人像模式的实现对于软件层面来说,关键还是有能精确输出带有深度(景深)信息的图像分割算法。

2024-03-28 19:43:53 442

原创 OpenGL ES 3.0 从入门到精通系统性学习教程

因为在工作中频繁使用 OpenGL ES 做一些特效、滤镜之类的效果,加上平时学到的的知识点也比较细碎,就想着去系统地学习下 OpenGL ES 相关开发知识,并将学习过程记录下来。

2024-02-26 10:41:25 343

原创 OpenGL ES (OpenGL) Compute Shader 计算着色器是怎么用的?

OpenGL ES (OpenGL) Compute Shader 是怎么用的?Compute Shader 是 OpenGL ES(以及 OpenGL )中的一种 Shader 程序类型,用于在GPU上执行通用计算任务。与传统的顶点着色器和片段着色器不同,Compute Shader 被设计用于在 GPU 上执行各种通用计算任务,而不是仅仅处理图形渲染。Compute Shader 使用场景广泛,除了图像处理之外,还可以用于物理模拟计算、数据加密解密、机器学习、光线追踪等。

2024-02-25 22:01:32 6460

原创 OpenGL ES 渲染 NV21、NV12、I420、YV12、YUYV、UYVY、I444(建议收藏)

本文主要讲解常见的 YUV 格式图像渲染方式,如果对 YUV 格式不是很熟悉的同学可以翻看旧文,YUV 格式的介绍这里不再展开。

2024-02-21 16:04:43 6665

原创 OpenGL ES 渲染 NV21、NV12 格式图像有哪些“姿势”?

前文提到,分别用于保存 Y plane 和 UV plane 的数据,然后在片段着色器中分别对 2 个纹理进行采样,转换成 RGB 数据。,其中 GL_LUMINANCE 纹理用来加载 NV21 Y Plane 的数据,GL_LUMINANCE_ALPHA 纹理用来加载 UV Plane 的数据。OpenGLES 常用纹理的格式类型GL_LUMINANCE 纹理在着色器中采样的纹理像素格式是(L,L,L,1),L 表示亮度。

2024-01-29 09:58:57 5950

原创 OpenGL ES 实现图像腐蚀、膨胀、边缘检测

用于识别图像中物体之间的边界。常用于目标检测、图像分割和计算机视觉任务。常见的边缘检测算法包括Sobel、Prewitt、Canny等。(Image Erosion):用于缩小或消除图像中物体的边界。主要用于去除图像中的小细节、噪声或不规则物体。,本文再介绍一下图像基本处理之腐蚀、膨胀和边缘检测,它们在图像处理和计算机视觉领域有着广泛的应用。:用于增大或突出图像中物体的边界。主要用于连接图像中的物体,填充小孔或缝隙,以及强调物体的边缘。

2024-01-23 19:41:49 5648

原创 OpenGL ES 如何实现图像锐化?

图像锐化是一种图像处理技术,其目的是增强图像中的细节和边缘,使图像看起来更加清晰。这一过程通常涉及到突出图像中的高频信息,特别是强调像素之间的灰度变化。通过增强图像的高频细节,图像锐化可以改善图像在人类视觉系统和计算机视觉系统中的感知效果。图像锐化处理的目的是为了使图像的边缘、轮廓线以及图像的细节变得清晰,经过平滑的图像变得模糊的根本原因是因为图像受到了平均或积分运算,因此可以对其进行逆运算(如微分运算,其实这里用的是差分)就可以使图像变得清晰。

2024-01-17 11:38:22 5684

原创 工作中太在意领导的看法怎么办?

目前在深圳某互联网大厂,处于实习期,上周领导委婉地表达了对我工作效率不太满意,我现在心态也不太对,很担心没办法转正,很担心领导的看法,有时候犯了小错心里就老是琢磨:领导会怎么看我?很明显不能,不管在什么环境里都不能把希望寄托在别人身上,不要把你宝贵的精力浪费在这上面,领导怎么看是他自己的事情,与你无关,他爱怎么看怎么看。你好星主,工作中太在意领导的看法怎么办?

2024-01-09 19:41:31 390

原创 OpenGL ES 如何直接渲染 P010、P016 格式图像?

P010 最早是微软定义的格式,表示的是 YUV 4:2:0 的采样方式,也就是说 P010 表示的是一类 YUV 格式,它的内存排布方式可能是 NV21、NV12、YU12、YV12。P016 也表示的是 YUV 4:2:0 的采样方式,与 P010 的差异只是有效位不同,P010 的有效位是 10bit , P016 有效位为 16bit。,在 Shader 中采样的时候,把 RG 通道当成 v 分量数据,把 BA 通道当成 u 分量数据,分别转成 16bit 数据,然后在进行归一化。

2024-01-02 20:11:03 7997

原创 OpenGL ES 如何渲染 16bit 图像?

既然直接使用 16bit 的格式不行,也不能直接使用 CPU 转换成 8bit 的图像(性能过慢),要想 GPU 直接处理 16bit 图像,我觉得可以利用 2 个通道 8bit 格式如 GL_LUMINANCE_ALPHA 或者 GL_RG8 完成加载 16bit 图像数据到纹理,然后采样的时候再将 2 个 8bit 数据转换成 16bit .我们在 shader 采样之后,每一个通道的值都会被归一化,8bit 归一化之前的范围是 0~255,16bit 归一化之前的范围是。文章首发于公众号:字节流动。

2023-12-28 19:05:12 4105

原创 Java OpenGLES 获取当前绑定的帧缓冲区

【代码】Java OpenGLES 获取当前绑定的帧缓冲区。

2023-12-27 14:23:59 372

原创 OpenGL ES 3.0 帧缓冲区失效 glInvalidateFramebuffer

如果绑定了帧缓冲区对象,则附件可能包含 GL_COLOR_ATTACHMENTi、GL_DEPTH_ATTACHMENT、GL_STENCIL_ATTACHMENT 或 GL_DEPTH_STENCIL_ATTACHMENT。有这个例子它的使用场景就比较好理解了,上述多重采样场景结束之后就用不到多重采样缓冲区 mMSAAFramebuffer 绑定的深度缓冲区了,可以将其内容设置为无效。有了帧缓冲区失效机制,GPU 就可以删除不再需要的顿缓冲区内容,以减少每个帧保留的内容数量。

2023-12-25 16:30:05 4644

原创 OpenGL ES 抖音“传送带“特效实现终极版

很早之前的 demo 被翻出来了,最近有读者在知识星球上提问关于“传送带”特效性能的优化。这位读者按照这篇文章的思路,实现了“传送带”效果,但是遇到了性能问题。在优化性能之前先回顾下“传送带”效果的实现原理。

2023-12-15 12:15:46 4651

原创 抖音、视频号流行的 Bokeh(虚化) 效果是怎么实现的?

Bokeh 效果是指照片中背景模糊而主体清晰的一种摄影效果。这种效果是通过使用大光圈的镜头来实现的,使得光圈外的景物失去焦点,呈现出一种柔和、虚化的效果。

2023-11-29 17:47:29 7809

原创 听说你把 ChatGPT 当成搜索引擎用了?

未经作者(微信ID:Byte-Flow)允许,禁止转载文章首发于公众号:字节流动看到一些读者朋友把 ChatGPT 当成搜索引擎使用了,当然这样使用也没有问题,只是并不能发挥出 ChatGPT 背后大型语言模型(LLM)的优势,似乎有一种在“拿斧头切菜”的感觉。其实 ChatGPT 正确的使用姿势需要结合着清晰、明确的 Prompt ,那 Prompt 又是什么?Prompt 翻译为“”,它通常是一段文本或问题,

2023-11-27 19:49:05 947

原创 “热成像”风格的效果是怎么实现的?(内附源码)

未经作者(微信ID:Byte-Flow)允许,禁止转载文章首发于公众号:字节流动之前转载过知乎上面的一篇文章:作者:这是上帝的杰作链接:https://zhuanlan.zhihu.com/p/344110917文章详细讲解了 Shader 实现“热成像”效果的思路,但是并没有给出完整的实现代码,后台有读者多次催促,希望我能实现下并给出完整的代码,于是,今天晚上就花了一点时间简单实现了下这个效果。,其中发光这一步不大重要。

2023-11-27 19:36:25 4921

原创 OpenGL YUV 和 RGB 图像相互转换出现的偏色问题怎么解决?

未经作者(微信ID:Byte-Flow)允许,禁止转载文章首发于公众号:字节流动早上知识星球里的一位同学,遇到 yuv2rgb 偏色问题,这个问题比较典型,今天展开说一下。

2023-11-23 12:07:48 432

原创 程序员该如何确定任务(项目)的排期?

未经作者(微信ID:Byte-Flow)允许,禁止转载所谓定任务的排期其实就是预估完成一个任务所需要的时间,简而言之就是给你一个活,你预估下需要多长时间可以搞定。排期这个东西,一般是老板比较喜欢的,通过一张表格便可以对每个人的进度和安排一目了然,项目经理也能通过它更好地对项目进行把控。定任务的排期往往还会涉及自我内心的博弈,什么博弈呢?比如你排期估的太长了,心里可能会犯嘀咕:时间估长了,领导和同事会不会觉得我能力不行,这样会不会不太好?

2023-10-31 20:06:03 256

原创 Android 加载.9 png NinePatch 图片为 bitmap

【代码】Android 加载.9 png NinePatch 图片为 bitmap。

2023-10-13 19:30:14 136

原创 写给程序员的跳槽攻略

未经作者(微信ID:Byte-Flow)允许,禁止转载有读者提问:我在现在这家公司呆了 4 年了,工作上说实话压力不大,每天按部就班做着重复性的工作,基本上没有什么大的挑战,最近有位同事通过跳槽成功给自己加薪50%,这让我觉得外面的机会很诱人。但是现在让我跳槽,我觉得自己没有准备好,没有做过什么像样的项目,项目经验不知道该写什么,有点害怕面试,也不知道该做什么准备,你能给我一些建议吗?

2023-09-28 16:15:09 156

原创 一文掌握 HardwareBuffer 的使用

该原创文章首发于微信公众号:字节流动未经作者(微信ID:Byte-Flow)允许,禁止转载。

2023-09-24 16:42:24 7768 4

原创 Shader 编程:发光效果

其实你注意观察光源的边界就可以发现:光的亮度在光源的边界出现了急剧的变化,光亮度在边界区域快速变弱,但是亮度并没有直接减少到 0。可明显看到光源边界位置的亮度急剧变弱,但是亮度没有减少到 0 , 从而在物理上给人一种越过边界的感觉,这就是发光的效果。从函数的曲线可以看出来,函数值在某个位置附近急剧减小,超出边界之后又缓慢地减小到 0 ,基本上符合我们的判断。我们把里面的发光效果的函数拿出来仿真一下:pow(0.06/abs(x), 2.8)一个面试题引发的思考:OpenGL 发光效果的本质是什么?

2023-09-24 16:19:08 6886

原创 Android OpenGL 做了一个修图(P 图)功能,对标 PS

玩过 P 图软件的朋友一定对这个功能有所了解,P 图我们可以简单地看做,基于这个原理,我们可以手动实现瘦脸、长腿、瘦腰、大眼、丰胸等等一系列效果,从而达到美颜、美型的目的。我们将一个区域的像素移走以后,那么用什么来填充这个被"掏空"的区域呢?

2023-09-21 10:15:18 6782

原创 OpenGL ES 实现抖音“蓝线挑战”特效

前面文章中我们实现了抖音传送带特效,发现大家普遍对抖音视频特效感兴趣,那么本文将继续这个抖音特效实现系列,后面也将带来更多的关于抖音视频特效分析和实现的文章。本文带给大家的是抖音的经典视频特效“蓝线挑战”实现,为啥选择“蓝线挑战”?之前这个特效没太在意,知道看到老罗直播团队用这个特效拍了一个短视频,发现挺有意思的。之前“蓝线挑战”特效有人实现过它的变种,但是看起来搞的有点复杂了,本文的实现思路就非常简单,抖音“蓝线挑战”和“传送带”实现原理基本相同:每次更新预览帧图像的特定区域进行渲染。抖音“蓝线挑战”特效

2023-09-03 22:43:53 8955

原创 OpenGL ES 实现抖音传送带特效

Android 相机出图是 YUV 格式的,这里为了拷贝处理方便,先使用 OpenCV 将 YUV 图像转换为 RGBA 格式,当然为了追求性能直接使用 YUV 格式的图像问题也不大。

2023-09-03 22:41:05 8736

原创 Android 图片转场和轮播特效,你想要的都在这了

未经作者(微信ID:Byte-Flow)允许,禁止转载使用 OpenGL 做图像的转场效果或者图片轮播器,可以实现很多令人惊艳的效果。

2023-09-03 22:37:30 8910

原创 Shader 编程:绘制心形

该原创文章首发于微信公众号:字节流动未经作者(微信ID:Byte-Flow)允许,禁止转载今天讲一下绘制心形的两种方式,主要是为了扩展一下绘制复杂形状的思路,为后面讲特效做一些简单的铺垫。心形绘制可以参考 ShaderToy 上的代码:上述代码绘制心形,首先将原点从左下角移至屏幕坐标系中央,这样所有片元的向量均以屏幕中心为起点,则向量 uv 就是画布中心与像素点坐标之间的方向向量。然后利用反正切函数值和当前片元(像素)与屏幕中心点的距离相比较,来确定心形状的边界。

2023-08-27 23:31:09 9627

原创 Shader 编程:三角形、矩形等多边形绘制

该原创文章首发于微信公众号:字节流动未经作者(微信ID:Byte-Flow)允许,禁止转载。

2023-08-13 21:46:05 9655

原创 Shader 编程:圆和曲线

该原创文章首发于微信公众号:字节流动未经作者(微信ID:Byte-Flow)允许,禁止转载前面发了一些关于 Shader 编程的文章,有读者反馈太碎片化了,希望这里能整理出来一个系列,方便系统的学习一下 Shader 编程。由于主流的 Shader 编程网站,如 ShaderToy, gl-transitions 都是基于 GLSL 开发 Shader ,加上 MSL 和 GLSL 语法上差别不大,后面系列文章将以 GLSL 为主来介绍 Shader 编程。

2023-08-06 17:55:16 9556

原创 Shader 编程:GLSL 重要的内置函数

前面发了一些关于 Shader 编程的文章,有读者反馈太碎片化了,希望这里能整理出来一个系列,方便系统的学习一下 Shader 编程。由于主流的 Shader 编程网站,如 ShaderToy, gl-transitions 都是基于 GLSL 开发 Shader ,加上 MSL 和 GLSL 语法上差别不大,后面系列文章将以 GLSL 为主来介绍 Shader 编程。后面 Shader 编程将使用 VSCode + ShaderToy 插件作为编程环境,步骤如下:下载安装 VSCode;

2023-08-06 17:32:17 9826

原创 OpenGL ES FBO 离屏渲染详解(附项目源码)

FBO(Frame Buffer Object)即帧缓冲区对象,实际上是一个可添加缓冲区的容器,可以为其添加纹理或渲染缓冲区对象(RBO)。FBO 本身不能用于渲染,只有添加了纹理或者渲染缓冲区之后才能作为渲染目标,它仅且提供了 3 种附着(Attachment),分别是颜色附着、深度附着和模板附着。RBO(Render Buffer Object)即渲染缓冲区对象,是一个由应用程序分配的 2D 图像缓冲区。渲染缓冲区可以用于分配和存储颜色、深度或者模板值,可以用作 FBO 中的颜色、深度或者模板附着。

2023-08-04 15:54:04 11269

原创 OpenGL ES 3.0 PBO Pixel Buffer Object 像素缓冲区对象

OpenGL PBO(Pixel Buffer Object)被称为像素缓冲区对象,主要被用于异步像素传输操作。PBO 仅用于执行像素传输,不连接到纹理,且与 FBO (帧缓冲区对象)无关。**

2023-08-04 15:17:32 10154

原创 人像抠图 + OpenGL ES 还能这样玩?没想到吧(附带源码)

OpenGL ES 利用抠图算法实现人像留色。

2023-08-02 10:07:22 10257

原创 OpenGL 使用 Shader 实现 RGBA 转 NV21(附带源码)

之前写过一篇 OpenGL 使用 shader 实现 RGBA 转 YUYV 的文章,有几位读者大人在后台建议写一篇 shader 实现 RGBA 转 NV21 的文章,因为在实践中 NV21 格式用的比较多,于是我今天把这篇文章放出来。关于 YUV 图像的知识和看图工具,可以参考下面的推送,本文不再赘述。一文掌握 YUV 图像的基本处理OpenGL 完成图像的渲染后,很多情况下需要将渲染后的图像读取到内存进行下一步处理,这个时候使用 glReadPixels 直接读高分辨率的图像(RGBA)往往会带来性能

2023-08-02 09:50:59 8878

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除