在我的应用程序中,我正在做一些图像像素操作。 我的代码基于 THIS示例。
我所做的唯一更改是将 FRAGMENT_SHADER
更改为灰度,它看起来像这样:
private static final String FRAGMENT_SHADER =
"#extension GL_OES_EGL_image_external : require\n" +
"precision mediump float;\n" + // highp here doesn't seem to matter
"varying vec2 vTextureCoord;\n" +
"uniform samplerExternalOES sTexture;\n" +
"void main() {\n" +
" vec4 tc = texture2D(sTexture, vTextureCoord);\n" +
" gl_FragColor.r = tc.r * 0.3 + tc.g * 0.59 + tc.b * 0.11;\n" +
" gl_FragColor.g = tc.r * 0.3 + tc.g * 0.59 + tc.b * 0.11;\n" +
" gl_FragColor.b = tc.r * 0.3 + tc.g * 0.59 + tc.b * 0.11;\n" +
"}\n";
问题: 我从 Galaxy s7 设备录制了一段视频,录制后我拍摄了录制的视频,我正在从 2 个不同的设备(Galaxy S7 和 Galaxy s3)读取第一帧,我发现像素值在那些设备之间完全不同设备。
有人知道为什么会这样吗?由于这种差异,我的算法失败了,我该怎么做才能解决这个问题?
更新:
这是我得到的差异的示例。
银河 S3: 矩阵的一部分 213, 214, 212, 214, 216, 214, 213, 212, 212, 212, 213, 214, 214, 214, 213, 213, 214, 214, 214, 214, 212, 213, 212, 213, 212, 214, 214, 212, 212, 210, 211, 210, 211, 210, 211, 211, 214, 211, 214, 213, 213, 214, 214, 216, 216, 216, 215, 215, 216, 212, 213, 213, 214, 213, 213, 212, 211, 209, 209, 207, 208, 208, 210, 211, 209, 207, 209, 210, 217, 219, 216, 209, 209, 210, 210, 210, 211, 209, 207, 205, 205, 206, 210, 210, 220, 211, 202, 210, 211, 206, 206, 209, 210, 211, 213, 219, 222, 216, 217, 217
非零像素数:1632816
所有像素的总和:3.1834445E8
银河 S7: 与 Galaxy 3 相同的 Matrix 部分 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164
非零像素数:1063680
所有像素的总和:1.6593408E8
更新2:
我发现收到的图像完全毁了,但是视频录制的很好。 这是 Galaxy S3 的好照片:
我完全不知道这里发生了什么,但我知道最后一张图片对于所有 Marshmallow 设备(Galaxy S6、S7 和华为)都是一样的
最佳答案
Ok 经过一周的努力寻找解决方案,找到了!
正如我所说,我基于 bigflake 示例,在这个示例中有一个反转框架的选项,在示例中完成了什么。
通过将 invert 更改为 false,问题得到解决。
如果有人能向我解释框架反转的原因,以及为什么决定将其默认设置为“真”,我将不胜感激。
感谢您的帮助!
如果不够清楚,这是我所做的更改:
outputSurface.drawImage(false);
关于android - OpenGL ES 2 不适用于 Android API23,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39465637/