在我的应用中,我正在做一些图像像素操作。
我的代码基于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、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,164,164,164,164,164,164,164,164,164,164
非零像素数:1063680
所有像素的总和:1.6593408E8
Update2:
我发现收到的图像完全毁了,但视频录制得很好。
这是Galaxy S3的好图像:
这是我从Galaxy S7获得的图像(相同的帧号)
我完全不知道这里会发生什么,但我知道所有棉花糖设备(Galaxy S6,S7和华为)的最后一张图片都相同
最佳答案
经过一周的努力寻找解决方案,确定了!
正如我所说,我基于bigflake示例,在此示例中,有一个选项可以反转框架,在示例中,该操作已完成。
通过将invert更改为false,可以解决问题。
如果有人能向我解释帧反转的原因,以及为什么决定将其默认设置为“true”,我将不胜感激。
感谢您的所有帮助!
如果还不够清楚,这就是我所做的更改:
outputSurface.drawImage(false);