2012-07-11 44 views
4

我具有表示在一8位格式可以通过平均来混合8位颜色吗?

MSB LSB 

    RRGGBB 

位0和1是垃圾颜色2个字节。

要混合两种颜色,我应该平均每种颜色的位数?

R1 = (C1^00110000B) >> 4; 
G1 = (C1^00001100B) >> 2; 
B1 = (C1^00000011B); 

R2 = (C2^00110000B) >> 4; 
G2 = (C2^00001100B) >> 2; 
B2 = (C2^00000011B); 

R3 = avg(R1 , R2) << 4; 
G3 = avg(G1 , G2) << 2; 
B3 = avg(B1 , B2); 

C3 = R3 + G3 + B3 

C1是第一颜色,C2是第二,C3是混合色,^是逐位AND,>>是逐位右移,<<是按位左移,xxxxxxxxB是二进制数和avg(a , b)是算术平均值。

+0

为了屏蔽你需要'&',而不是'^'。 – wildplasser 2012-07-11 19:04:18

回答

2

你可以认为颜色是3D空间中的点。 “平均”的定义取决于您使用的空间。如果您平均使用RGB,HSL或更“异国情调”的东西,您会得到不同的结果。

但是如果你限制在每种颜色2位,那么这些都不是真的很重要,你的建议是好的(除非在评论中指出,你需要&而不是^来掩盖)。 (平均值)我假设你的意思是增加位数(每种颜色)并除以2(右移)。注意,如果你重复执行这些操作(例如平均两个图像,然后用第三个平均值计算结果,然后将结果与第四个结果平均),那么你最终会得到黑色的东西,因为右移向下,所以你稍微偏向于更低的值)。