Tag: 核心显卡

如何在没有预乘alpha的情况下获得真实的RGBA或ARGB颜色值?

我使用CGBitmapContextCreate和kCGImageAlphaPremultipliedFirst选项创build位图上下文。 我用一些主要颜色(纯红色,绿色,蓝色,白色,黑色),一些混合颜色(即紫色)和一些阿尔法变化做了5×5testing图像。 每当alpha分量不是255时,颜色值都是错误的。 我发现我可以重新计算颜色,当我做这样的事情: almostCorrectRed = wrongRed * (255 / alphaValue); almostCorrectGreen = wrongGreen * (255 / alphaValue); almostCorrectBlue = wrongBlue * (255 / alphaValue); 但问题是,我的计算有时会减less3或甚至更多。 所以例如,我得到的价值为242,而不是绿色,我100%肯定它必须是正好245.阿尔法是128。 然后,对于与PNG位图中不同的alpha不透明度完全相同的颜色,我得到alpha = 255和green = 245,因为它应该是。 如果alpha为0,那么红色,绿色和蓝色也是0.这里所有的数据都丢失了,我无法弄清楚像素的颜色。 我怎样才能避免或撤销这个alpha预乘,以便我可以根据真实的RGB像素值修改图像中的像素,就像在Photoshop中创build图像时一样? 如何恢复R,G,B和A的原始值? 背景信息(可能不需要这个问题): 我正在做的是这样的:我把一个UIImage,绘制到一个位图的上下文,以执行一些简单的image processingalgorithm,移动每个像素的颜色取决于它以前的颜色。 没有什么特别的 但是我的代码需要真实的颜色。 当一个像素是透明的(意味着它的alpha值小于255)时,我的algorithm不应该关心这个,它应该只是修改R,G,B,而Alpha则保持不变。 有时候,它也会将阿尔法向上或向下移动。 但是我把它们看成是两件不同的事情。 Alpha控制透明度,而RGB控制颜色。