在我的应用程序中,我正在做一些图像像素操作。 我的代码基于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)读取第一帧,我发现像素值之间的像素值完全不同设备
有人知道为什么会这样吗?为了解决这个问题,我该怎么做,因为我的算法由于这种差异而失败了?
更新
这是我得到的差异的例子。
Gaaxy S3: 矩阵的一部分 213,214,212,214,216,212,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 < / p>
非零像素数:1632816
所有像素的总和:3.1834445E8
Galaxy S7: Matrix与Galaxy 3的相同部分 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,164 / p>
非零像素数:1063680
所有像素的总和:1.6593408E8
UPDATE2:
我发现收到的图像绝对毁了,但视频录制得很好。 这是Galaxy S3的好照片:
我根本不知道这里发生什么,但我知道所有Marshmallow设备(Galaxy S6,S7和华为)的最后一张图片是相同的
答案 0 :(得分:1)
经过一周的努力寻找解决方案后,确实找到了!
正如我所说,我基于bigflake示例,在此示例中,有一个选项可以反转框架,并在示例中说明了所做的事情。
通过将反转更改为false,问题得以解决。
我真的很感激,如果有人可以向我解释框架倒置的原因,以及为什么决定将其设置为&#34; true&#34;默认情况下。
谢谢你的帮助!
这是我所做的改变,如果它不够清楚:
outputSurface.drawImage(false);