glReadPixels 是 OpenGL ES 的 API,通常用于从帧缓冲区中读取像素数据,OpenGL ES 2.0 和 3.0 均支持。使用非常方便,但是效率也是最低的。...2)ImageReader 如何使用? 我们可以使用 ImageReader 对象的 Surface 对象搭配 OpenGL 进行数据渲染。...在使用 OpenGL 的时候经常需要在 GPU 和 CPU 之间传递数据,例如在使用 OpenGL 将 YUV 数据转换成 RGB 数据时就需要先将 YUV 数据上传到 GPU ,一般使用函数 glTexImage2D...不使用 PBO 加载纹理: 使用 PBO 加载纹理: 2) PBO 如何使用?...2)HardwareBuffer 如何使用?
而在音视频领域,相信不少同学都有从FBO读取像素数据的需求,熟悉OpenGL ES的童鞋应该首先想到了glReadPixels,而了解更为深入的童鞋相信都会使用更为高效的PBO。 ...正确使用PBO的方式是,首先判断是否支持PBO,如果支持,则还是先使用glReadPixels进行读取测试,记录平均耗时,然后再使用PBO进行读取测试,记录平均耗时,最后对比两个方式的耗时,选择最快的一个...三、ImageReader(推荐) 在Android平台,提供了更为高效的像素数据读取方法,也就是ImageReader。 ...虽然ImageReader有对齐的问题,但是它却可以让你忽略PBO的兼容性。它使用简单标准;它天然支持多级缓存;它不需要OpenGL ES 3.0;它比PBO更为稳定和通用。...正因为这样,ImageReader才是Android读取FBO像素数据的正确方式! 四、知识点: Android平台下的FBO像素读取方式。 如何高效的从FBO读取像素数据。
glReadPixels glReadPixels 是 OpenGL ES 的 API ,OpenGL ES 2.0 和 3.0 均支持。使用非常方便,下面一行代码即可搞定,但是效率很低。...关于 PBO 的详细使用可以参考文章:OpenGL ES 3.0 开发连载(22):PBO , 这里不再赘述。...怎么跟 OpenGL ES 结合使用呢?...那我们可以利用 ImageReader 对象的 Surface 对象作为 OpenGL 展示渲染结果的 Window Surface ,每次渲染的结果可以通过 ImageReader 对象的回调获取。...两者在使用步骤上基本一致,均可以用于快速读取显存(纹理)图像数据,但是 HardwareBuffer 还可以访问其他硬件的存储器,使用更广泛。
本篇文章主要描述如何使用OpenGL ES来渲染i420(YUV420P)和nv21(YUV420SP) 首先准备yuv数据文件,使用ffmpeg对图片进行格式转换 原图大小为800x480: ?...中,片元着色器最后输出的都是rgba的数据,所以使用OpenGL来渲染YUV数据的关键还是将YUV数据传递给着色器,并在着色器中将YUV转化为RGB 在我们创建一个2D纹理并使用glTexImage2D...GL_UNSIGNED_BYTE, imageData ) GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0) } 首先把i420数据从文件中读取出来...GLES20.GL_UNSIGNED_BYTE, imageData ) GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0) } 从文件中读取...代码传送门 https://github.com/sifutang/opengl.git
读取的是当前绑定 FBO 的颜色缓冲区图像,所以当使用多个 FBO(帧缓冲区对象)时,需要确定好我们要读那个 FBO 的颜色缓冲区。 在大分辨率图像的读取时性能略差。...可以利用 ImageReader 对象的 Surface 对象作为 OpenGL 展示渲染结果的 Window Surface ,每次渲染的结果可以通过 ImageReader 对象的回调获取。...Native 层叫 AHardwareBuffer,AHardwareBuffer 读取显存(纹理)图像数据时,需要与 GLEXT 和 EGLEXT 配合使用。...两者在使用步骤上基本一致,均可以用于快速读取显存(纹理)图像数据,但是 HardwareBuffer 还可以访问其他硬件的存储器,使用更广泛。...Native 层建议选择 PBO 方式,超大分辨率建议尝试 HardwareBuffer 方式,Java 层建议使用 ImageReader 方式。
如YUV,RGB等 音视频同步:通过解封装步骤中获取的相关参数,同步解码出来的视频和音频数据,并发送到系统的显卡和声卡中进行播放 MediaPlayer生命周期 Android系统中,播放视频可以使用...MediaPlayer的使用必须遵循节点之间的状态转换,不然很容易出现IllegalStateException异常 MediaPlayer的使用 MediaPlayer的构造分为两种: 第一种是直接new...使用MediaPlayer的时候,需要一个surface来消费数据,我们可以使用SurfaceView或TextureView 使用SurfaceView的时候,绑定到SurfaceHolder即可...MediaPlayer val surface = Surface(textureView.surfaceTexture) mediaPlayer.setSurface(surface) OpenGL...播放视频 当我们需要利用OpenGL播放视频的时候,可以使用MediaPlayer+GLSurfaceView的组合,因为GLSurfaceView已经创建好了EGL环境,方便快速引入 整个流程的核心在于
使用Camera2 API实现相机预览样板代码太多了,偷一波懒,CV大法发动。。。...Google官方的Camera2BasicKotlin工程到手(该工程使用TextureView显示相机预览) TextureView显示相机预览 Camera2启动相机预览需要三个步骤: 打开Camera...CameraCaptureSession.StateCallback() { // ... }, null) 这样相机预览会不停的更新到这个surface上,最后显示到屏幕上(至于是如何显示到...) 关联OpenGL 创建EGL环境,绑定输出到textureView持有的SurfaceTexture上; 创建Session的时候传递一个关联了OES纹理的surface,当预览数据更新时,将数据更新到纹理上...绘制 当SurfaceTexture的onFrameAvailable回调,也就是有新的预览数据生成时,将图像数据更新到OES纹理上,然后使用GL采样纹理绘制即可 // Update image starem
每种方法可以接受一个变量以限制每次读取的数据量,但它们通常不使用变量。 .read() 每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。.../path/filename' for chunk in read_in_chunks(filePath): process(chunk) # 使用With...based with open(...) as f: for line in f: process(line) # 优化 面对百万行的大型数据使用...由此可知二进制读取依然是最快的模式。...如果从rb(二级制读取)读取改为r(读取模式),慢5-6倍。 结论 在使用python进行大文件读取时,应该让系统来处理,使用最简单的方式,交给解释器,就管好自己的工作就行了。
前面文章人像抠图 + OpenGL ES 还能这样玩?没想到吧,我们介绍了利用人像抠图算法生成的 mask 图,然后结合 OpenGL 可以产生一些有趣的效果。...本文主要参考飞鸽传书的开源项目 ncnn_Android_RobustVideoMatting ,它使用的是腾讯的 ncnn 神经网络计算框架,ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架...ncnn 地址:https://github.com/Tencent/ncnn 不过 ncnn_Android_RobustVideoMatting 数据源使用的是 NdkCamera ,这对做应用层开发的同学来说...private ImageReader.OnImageAvailableListener mOnPreviewImageAvailableListener = new ImageReader.OnImageAvailableListener...() { @Override public void onImageAvailable(ImageReader reader) { Image image
前文我们对 x264、fdk-aac 及 FFmpeg 进行了整合编译,本文将利用编译好的 FFmpeg 库对 Android Camera2 采集的预览帧先进行渲染,然后利用 OpenGL 添加滤镜,...最后读取渲染结果进行编码,生成 mp4 文件。...预览帧添加滤镜、编码流程 写 OpenGL ES 系列文章的时候,很多同学说为啥在 Native 层来写 demo ?...= new ImageReader.OnImageAvailableListener() { @Override public void onImageAvailable(ImageReader...glReadPixels , 之前提到高性能的读取方式还有 PBO 、HardwareBuffer ,可以参考文章Android OpenGL 渲染图像读取哪家强?
当我们要批量读取多个文件所有内容,并把所有行打印出来时,我们可能会这样写代码: file_list = ['1.txt', '2.txt', '3.txt']for path in file_list:...如果要使用 fileinput读取列表中的多个文件,那么可以这样写代码: import fileinputfile_list = ['1.txt', '2.txt', '3.txt']with fileinput.input...然后使用如下命令运行: python3 read.py 1.txt 2.txt 3.txt 运行效果如下图所示: ? 自动把参数对应的文件都读入并打印了出来。这里的参数可以有任意多个。
前文我们对 x264、fdk-aac 及 FFmpeg 进行了整合编译,本文将利用编译好的 FFmpeg 库对 Android Camera2 采集的预览帧先进行渲染,然后利用 OpenGL 添加滤镜,...最后读取渲染结果进行编码,生成 mp4 文件。...预览帧添加滤镜、编码 [预览帧添加滤镜、编码流程] 写 OpenGL ES 系列文章的时候,很多同学说为啥在 Native 层来写 demo ?...= new ImageReader.OnImageAvailableListener() { @Override public void onImageAvailable(ImageReader...image.getHeight()); } image.close(); } } }; 之后利用 GLSurfaceView 来自动创建 OpenGL
const char* pszFormat 使用"GetTagMulti()"函数必需一个字符串变量(缓存)并用读取WinCC变量的格式信息对其初始化。...使用"GetTagMulti()"函数必需为每一个读取的变量设定"pszTag"字符串。...使用"GetTagMulti()"函数必需为每一个读取的变量设定地址。...由于这个原因,不能使用返回值来检查读取WinCC变量是否成功。...使用C小于4个存储字节的数据类型读取WinCC整数 如果使用占用小于4字节 (如 BYTE, WORD, char 或short)的C 变量来读取WinCC整数,会导致未定义的系统动作,因为在这种情况下
、如何使用的,其实AgileConfig还有一个重要的组成部分:AgileConfig.Client。...最近有几个同学问我如何集成Client,如何使用Client,看来光是Readme上的示例还是不够的,有必要比较详细的介绍下如何使用AgileConfig.Client。...下面通过几个示例来演示下如何AgileConfig.Client如何在mvc,控制台,wpf等程序上来读取配置: asp.net core mvc下读取配置 mvc项目应该是目前使用最广泛的项目,同样它与...下面来看看如何在mvc项目下使用AgileConfig.Client。...通过以上的设置,其实后面的配置读取跟使用appsettings.json没什么区别了。
参考: 如何使用python读取文本文件中的数字?...python读取txt各个数字 python 读取文本文件内容转化为python的list python:如何将txt文件中的数值数据读入到list中,且在list中存在的格式为float类型或者其他数值类型...python .txt文件读取及数据处理总结 利用Python读取txt文档的方法 Python之读取TXT文件的三种方法 python读取 .txt 文本内容以及将程序执行结果写入txt文件 Python...读取文件的方法 读写文本文件 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/139037.html原文链接:https://javaforall.cn
OpenGL ES 相机预览 �OpenGL ES 相机预览 相机开发是 OpenGL ES 开发的重要应用,利用 OpenGL 可以很方便地实现相机美颜、滤镜、塑型以及一些动态特效,其性能显著优于对应功能的...NDK OpenGL ES 3.0 开发(三):YUV 渲染一文。...相机预览数据获取,以 Camera2 为例,主要是通过 ImageReader 实现,该类封装了 Surface : private ImageReader.OnImageAvailableListener...mOnPreviewImageAvailableListener = new ImageReader.OnImageAvailableListener() { @Override public...void onImageAvailable(ImageReader reader) { Image image = reader.acquireLatestImage();
125 * 此设置意味着包含在输入源中的图像将只按顺序读取,可能允许 reader 避免缓存包含与以前已经读取的图像关联的数据的那些输入部分。...*/ 127 reader.setInput(iis, true); 128 129 /* 130 * 描述如何对流进行解码的类....用于指定如何在输入时从 Java Image I/O 131 * 框架的上下文中的流转换一幅图像或一组图像。...143 param.setSourceRegion(rect); 144 /* 145 * 使用所提供的 ImageReadParam...读取通过索引 imageIndex 指定的对象,并将 它作为一个完整的 146 * BufferedImage 返回。
javax.imageio.ImageIO.read方法有多个重载方法,支持File,InputStream,URL等参数,但这些方法有可能会在解码过程中使用文件系统做cache,具体原因这里不展开讲了...有了磁盘IO势必会影响解码效率,这在性能敏感的应用环境是不能容忍的, 如果要实现完全基于内存的图像解码,就不能简单使用javax.imageio.ImageIO.read方法。...public final void testreadMemoryImage() throws IllegalArgumentException, IOException { // 将图像文件加读取到内存成为字节数组...decode success,width=%d,heigh=%d\n", bufImg.getWidth(),bufImg.getHeight()); } /** * 从内存字节数组中读取图像...不同点就是readMemoryImage1方法直接使用javax.imageio.ImageIO.read(ImageInputStream stream)方法来解码。
参考链接: Java中Scanner和BufferReader类之间的区别 我需要使用Java逐行读取大约5-6 GB的大型文本文件。 我如何快速做到这一点? ...这是读取1GB测试文件最快的3种文件读取方法。 请注意,在运行性能测试时,我没有向控制台输出任何内容,因为这确实会降低测试速度。 我只是想测试原始读取速度。 ...读取1GB文件始终不到1秒。 ...读取1GB的文件大约需要3.5秒,与读取较大的文件相比,它排在第二位。 ...读取1GB测试文件大约需要4.5秒。
源代码如下: *&---------------------------------------------------------------------*...
领取专属 10元无门槛券
手把手带您无忧上云