我在我的应用程序中进行了一些图像像素操作。
我的代码基于这个示例。
我唯一做的更改是将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设备录制了一段视频,录制后,我从两个不同的设备(Galaxy S7和Galaxy S3)中读取了第一个帧,我发现这些设备之间的像素值完全不同。
有人知道为什么会发生这种情况吗?我应该怎么做才能解决这个问题,因为我的算法因为这种差异而失败?
更新: 这是我得到的差异示例。
Gaaxy 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
Galaxy S7: 与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
非零像素的数量:1063680
所有像素的和:1.6593408E8
更新2:
我发现收到的图像完全被破坏了,但录制的视频很好。
这是来自Galaxy S3的好图像:
我完全不知道这里发生了什么,但我知道最后一张图对于所有Marshmallow设备(Galaxy S6、S7和华为)都是相同的。