UIImage/CGImage 改变我的像素颜色
我有一张图像,它的 RGB 分量是全白色的,具有不同的 alpha,例如 RGBA 格式的 0xFFFFFF09。但是,当我使用 UIImage 或 CGImage API 加载此图像,然后在 CGBitmapContext 中绘制它时,它会显示为灰度,其中 RGB 分量设置为 alpha 值 - 所以在上面的示例中,像素会显示出来0x09090909 而不是 0xFFFFFF09。因此,本来应该是白色且具有不同透明度的图像实际上实际上是黑色且具有透明度。我正在加载的 PNG 文件没有任何问题——各种图形程序都能正确显示它。
我想知道这是否与我使用 kCGImageAlphaPremultipliedFirst 有关,但我无法尝试它,因为 CGBitmapContextCreate 使用其他值失败。
这里的最终目的是获取像素数据,我可以使用 glTexImage2D 将其上传到纹理。我可以使用 libPNG 完全绕过 iOS API,但是还有其他建议吗?非常感谢。
I have an image that is totally white in its RGB components, with varying alpha -- so, for example, 0xFFFFFF09 in RGBA format. But when I load this image with either UIImage or CGImage APIs, and then draw it in a CGBitmapContext, it comes out grayscale, with the RGB components set to the value of the alpha -- so in my example above, the pixel would come out 0x09090909 instead of 0xFFFFFF09. So an image that is supposed to be white, with varying transparency, comes out essentially black with transparency instead. There's nothing wrong with the PNG file I'm loading -- various graphics programs all display it correctly.
I wondered whether this might have something to do with my use of kCGImageAlphaPremultipliedFirst, but I can't experiment with it because CGBitmapContextCreate fails with other values.
The ultimate purpose here is to get pixel data that I can upload to a texture with glTexImage2D. I could use libPNG to bypass iOS APIs entirely, but any other suggestions? Many thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
alpha 为 x 的黑色背景上的白色是与所有分量中的 x 相对应的灰度值。这就是乘法混合的工作原理。
White on a black background with an alpha of x IS a grey value corresponding to x in all the components. Thats how multiplicative blending works.