2010-01-05 235 views
2

假设我有4个位图,比如CMYK,它们都是1位/像素,颜色不同,我想将它们转换为8位/彩色(24位)位图,我该怎么做?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值(0255255)中,在像素0(第一像素),I具有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)? 

谢谢,只是困惑,如何1bit的分离转换成8位图像..谢谢..

回答

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中构建像素,然后通过执行(R, G, B) = (1-C, 1-M, 1-Y)将它们转换为RGB,其大小可以是

为了1位值转换为一个8位的值,你只需要每00x001转化为0xFF:由0xFF乘以bitValue

+0

对,我完全忘了..所以当你说我必须在CMYK中构建像素时,这是否意味着它会像4位索引颜色? (CMYK)=(1,1,1,1)...等等?无论如何,这是相当有益的,谢谢..标记为答案.. – krebstar 2010-01-05 02:09:39

+1

是的,你需要建立4元组的颜色。正如我所说,问题在于将CMYK转换为RGB,因为没有标准方法,正如@danben所说。 (1-C)(1-K),(1-M)(1-K),(1-Y)(1-K))'。 – Tordek 2010-01-05 02:13:31

+0

对,谢谢.. :)一个近似是足够好的,我只需要在RGB设备(显示器)上显示RGB ..再次感谢:) – krebstar 2010-01-05 02:16:49

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 

鉴于此,我宁愿去以比实际的算法用于从CMYK计算RGB的映射(开关情况,或者如果-别人的)。当然,如果K被设置,则返回提前。

+0

好主意!谢谢! :) – krebstar 2010-01-10 08:28:41