Android BitmapFactory.decodeStream加载BGR格式?

时间:2011-09-01 08:55:30

标签: android opengl-es

我想通过android sdk提供的资产管理器加载.png文件。 AssetManager经理; / ./ BitmapFactory.decodeStream(manager.open(path));

它返回BGR格式数据但是opengl es 2.0使用RGB格式,因此,蓝色似乎是红色,红色似乎是蓝色,多么奇怪。

有什么解决方案吗?

我使用NvıdiaTegra2(Android 2.2)设备通过JNI测试应用程序以及c ++。

2 个答案:

答案 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也是微不足道的,这可能是解决此问题的最简单方法。