2011-08-17 101 views
1

我有一个图像,在其RGB组件是完全白色,具有不同的阿尔法 - 例如,在RGBA格式0xFFFFFF09。但是,当我用UIImage或CGImage API加载这个图像,然后在CGBitmapContext中绘制它时,它会出现灰度,将RGB组件设置为alpha的值 - 所以在上例中,像素会出来0x09090909而不是0xFFFFFF09。因此,应该是白色的,透明度不同的图像,实际上是透明的,而不是透明的。我加载的PNG文件没有问题 - 各种图形程序都能正确显示它。UIImage/CGImage改变我的像素颜色

我想知道这是否可能与我使用kCGImageAlphaPremultipliedFirst有关,但我无法试验它,因为CGBitmapContextCreate失败并显示其他值。

这里最终的目的是获得像素数据,我可以上传到纹理与glTexImage2D。我可以使用libPNG完全绕过iOS API,但还有其他建议吗?非常感谢。

+0

这个问题已经过时了吗?如果不是,你能否提供代码来加载示例项目中的图像以重现问题? – Kjellski

+0

感谢您的报价。我无法弄清楚这一点,因此放弃了CGImage API的使用,并直接使用libpng加载图像。 – RedMarbleGames

回答

0

黑色背景上的白色与x的alpha是所有组件中对应于x的灰色值。这就是乘法混合是如何工作的。

+1

感谢您的回答,但它并没有真正解决这个问题,即如何保持从文件加载的数据的完整性*无需乘法混合。当我在图像编辑器中加载这个图形时,它是一个逐渐消失的白色图像 - 根本没有灰色。但iOS会在数据加载时更改数据,这就是我想要避免的。 – RedMarbleGames