1位位图数据如何转换为8位(24bpp)?

3

假设我有4个位图,即CMYK,所有位图都是1像素/位,并且颜色不同,我想将它们转换为8位/颜色(24bpp)位图,应该如何操作?

如果数据看起来像这样:

// the Cyan separation

CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC
...

// the magenta separation, and so on..
MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM
...

假设青色的RGB值为(0,255,255),在像素0(第一个像素)处,我有一个值为1(开启),洋红色的RGB值为(255,255,0),在同一像素处,也有一个值为1。那么第一个RGB像素会是什么样子呢?它会是这个样子吗?

BBBB BBBB GGGG GGGG RRRR RRRR
// would this 3-byte sequence  actually be 255,255,255
// because the cyan has (0,255,255) and the 
// magenta has (255,255,0)?

谢谢,只是对如何将1位分离转换为8位图像感到困惑。谢谢。

2个回答

4

CMYK 是一种减色系统,而 RGB 是一种加色系统。

如果 CMY(K) 值为 (1.0, 1.0, 1.0),则颜色为黑色,而 RGB 值为 (255, 255, 255),则颜色为白色。

青色 + 洋红色 = 蓝色: (0, 255, 255) + (255, 0, 255) != (0, 0, 255)。但实际上不是这样的,因为我们在谈论不同的色彩系统。

您需要首先构建 CMYK 像素,然后将其转换为 RGB,这可以通过执行 (R, G, B) = (1-C, 1-M, 1-Y) 进行近似

为了将1位值转换为8位值,您只需将每个 0 转换为 0x00,每个 1 转换为 0xFF: 将 bitValue 乘以 0xFF


好的,我完全忘记了...所以当你说我必须用CMYK构建像素时,这是否意味着它会像4位索引颜色一样?(CMYK) = (1,1,1,1)..等等?无论如何,这非常有帮助,谢谢..将其标记为答案.. - krebstar
1
是的,你需要构建4元组颜色。问题就像我说的那样,是将CMYK转换为RGB,因为没有标准的方法,就像@danben所说的那样。或许 (R,G,B) = ((1-C)(1-K), (1-M)(1-K), (1-Y)(1-K)) - Tordek
好的,谢谢… :) 近似值就可以了,我只需要RGB显示在一个RGB设备(显示器)上.. 再次感谢 :) - krebstar
顺便提一下,在你给出的最后一个公式中,由于CMYK的值只能是1或0(1位),如果C或K为1,则R部分将为0? - krebstar

3
实际上,使用1位编码的CMYK,您有16种可能的组合(颜色),其中9种是黑色。
xxx1 -- black (8 comb's) -- 0x000000
0000 -- white -- 0xFFFFFF
1000 -- cyan -- 0x00FFFF
0100 -- magenta -- 0xFF00FF
0010 -- yellow -- 0xFFFF00
1100 -- blue -- 0x0000FF
1010 -- green -- 0x00FF00
0110 -- red -- 0xFF0000
1110 -- black -- 0x000000

鉴于此,我更倾向于使用映射(switch-case或if-else)而不是实际算法来计算从CMYK到RGB的转换。当然,如果K已经设置,则提前返回。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接