Android、Open GL ES、裁剪和缩放纹理

标签 android opengl-es

我在视频处理方面遇到了一些麻烦。我正在使用带有纹理的表面来处理带有 MediaCodec 和 MediaMuxer 的视频(解码、裁剪、以较低质量编码)。
在裁剪的中间步骤,我遇到了问题。基本上,我想做的是采用较小尺寸的视频,然后基于这一边,为较大的一面定义偏移量并将其裁剪掉。然后结果应适当缩放为 640x640 正方形。我搜索了相当多的时间,但我发现的所有信息都表明 Open GL 应该缩放图像本身。是的,我应该承认它做了一些缩放,但结果看起来很难看,它似乎很难垂直“压缩”。
所以,现在问题本身。有人可以向我提供一些解释,甚至是在 Open GL ES 中执行所需功能的代码 fragment 吗?
我已经尝试调整 Viewport 思想。

GLES20.glViewport(0, 0, 640, 640)  

更新
Isogen74 提出的 more less 的想法对我有用。它仍然拉伸(stretch)得非常明显,但总比什么都没有好。
您可以在这里找到更新的代码:OpenGL setup

最佳答案

裁剪 - 加载纹理时更改加载的纹理坐标;例如如果您想将图像加载的顶部和底部裁剪 10%,从 (0.0, 0.1) 到 (1.0, 0.9)。

缩放 - 答案取决于您缩小到 640*640 的大小。 OpenGL 过滤并非设计用于直接处理较大的缩小比例 - 它不是图像处理库 - 但假设相对较小的缩放比例只需确保您已打开 GL_LINEAR 纹理过滤而不是 GL_NEAREST。

如果你有一个大的缩小,你可能需要先对纹理进行 mipmap,然后将 GL_LINEAR_MIPMAP_NEAREST 或 GL_LINEAR_MIPMAP_LINEAR 作为你的缩小过滤器,但请注意,这不会给你带来一些好的东西,例如适当的缩放算法您可能会使用图像处理软件(例如双三次或类似软件)。

关于Android、Open GL ES、裁剪和缩放纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37076363/

相关文章:

java - android 一个信号通知返回应用程序的先前状态或页面

java - 用于过滤自定义 ListView 元素的搜索过滤器

android - glsurfaceview 忽略 admob 高度

android - 纹理大小的限制? Android Open GL ES 2.0

Android:当应用程序被杀死时保持服务运行

Android.mk - 获取所有子目录 java 文件的子集

java - Android 与 Eclipse 不兼容?

android - AdMob 广告未在 Android SDL 应用中正确显示

android - gluUnProject Android OpenGL ES 1.1 使用

iphone - 无法在 OpenGL ES 2.0 中通过 glDrawElements 绘制三角形