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

时间:2016-05-06 15:39:09

标签: android opengl-es

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

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

更新
Isogen74提出的想法对我来说更少。它仍然非常显着,但它没有任何好处 您可以在此处找到更新的代码:OpenGL setup

1 个答案:

答案 0 :(得分:1)

裁剪 - 更改加载纹理时加载的纹理坐标;例如如果你想从图像载荷的最高和最低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作为你的缩小过滤器,但要注意这不会给你一些好的东西,比如一个合适的缩放算法你可能会得到图像处理软件(例如双三次或类似的东西)。