android - 使用 OpenGL 的视频帧旋转

标签 android opengl-es android-camera video-processing

我正在将视频帧旋转到 0 到 360 之间的任意角度,因为我使用 OpenGL 旋转帧并将视频旋转到任意角度,但问题是在保存视频后,它的 View 被拉伸(stretch)为 45 度链接 rotated video sample frame image with stretch corner但我想要这个结果 rotated video frame image with a perfect 45 degrees 我正在使用的代码示例,请检查

import android.opengl.Matrix; 
private float[] MVPMatrix = new float[16];
Matrix.setRotateM(MVPMatrix, 0, 45, 0, 0, -1.0f);

请帮我找出完美的解决方案,任何帮助将不胜感激

最佳答案

要将旋转/缩放/平移应用于 MVPMatrix,您应该首先设置投影矩阵(宽度、高度 - 结果视频的大小)

GLES20.glViewport(0, 0, width, height);
float ratio = (float) width / height;
Matrix.orthoM(mMVPMatrix, 0, -ratio, ratio, -1, 1, -1, 1);
然后,您需要将转换应用于模型矩阵
Matrix.translateM(mTranslateMatrix, 0, dx, dy, 0);
mTempMatrix = mModelMatrix.clone();
Matrix.multiplyMM(mModelMatrix, 0, mTempMatrix, 0, mTranslateMatrix, 0);

Matrix.setRotateM(mRotationMatrix, 0, rotation, 0, 0, -1.0f);
mTempMatrix = mModelMatrix.clone();
Matrix.multiplyMM(mModelMatrix, 0, mTempMatrix, 0, mRotationMatrix, 0);

Matrix.scaleM(mScaleMatrix, 0, scaleX, scaleY, 1);
mTempMatrix = mModelMatrix.clone();
Matrix.multiplyMM(mModelMatrix, 0, mTempMatrix, 0, mScaleMatrix, 0);
最后将模型矩阵应用于 MVPMatrix
mTempMatrix = mMVPMatrix.clone();
Matrix.multiplyMM(mMVPMatrix, 0, mTempMatrix, 0, mModelMatrix, 0);

关于android - 使用 OpenGL 的视频帧旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52660207/

相关文章:

java - 为什么注释属性 Rest.rootUrl 的值必须是常量表达式?

android - 如何从相机 Intent 中获取图像路径?

android - 滚动时隐藏工具栏无法正常工作 [CoordinatorLayout]

opengl-es - OpenGL ES 1.0 或 2.0

android - 测量 Android 应用程序的帧渲染时间

java - 这个命令 "-c"是什么意思?

iphone - 如何在 openglES 中进行纹理映射? (将 2D 面映射到 3D 网格中)

Android:想要在相机预览上放置剪影叠加

Android 在三星手机上制作照片然后发送附件

android - 使用opencv进行文档轮廓检测