我想通过android sdk提供的资产管理器加载.png文件。 AssetManager经理; / ./ BitmapFactory.decodeStream(manager.open(path));
它返回BGR格式数据但是opengl es 2.0使用RGB格式,因此,蓝色似乎是红色,红色似乎是蓝色,多么奇怪。
有什么解决方案吗?
我使用NvıdiaTegra2(Android 2.2)设备通过JNI测试应用程序以及c ++。
答案 0 :(得分:0)
您必须知道颜色的位数,假设n位是颜色,所以前n位表示蓝色,后n位表示绿色,最后n位表示输入中的RED。您需要将这些位组交换为正确的顺序,如下所示:
output = (input << (2 * n)) + (input << n >> n) + (input >> (2 * n));
为了能够使用此解决方案,您需要了解n。
答案 1 :(得分:0)
最新版本的OpenGL,也提供BGR输入格式;不幸的是,OpenGL-ES并非如此。由于你在Android上,你必须处理OpenGL-ES。
如果您正在使用片段着色器,那么应用rgb→bgr swizzle也是微不足道的,这可能是解决此问题的最简单方法。