可以通过平均混合8位颜色吗?

时间:2012-07-11 18:57:05

标签: language-agnostic colors color-blending

我有2个字节代表8位格式的颜色

MSB  LSB
01234567
  RRGGBB

第0和第1位是垃圾。

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

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 )是算术平均值。

1 个答案:

答案 0 :(得分:2)

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

但是,如果你的每种颜色限制为2比特,那么这一切都不会真正重要,你的建议很好(除非,如评论中所述,你需要&,而不是{ {1}},掩盖)。

(通过“平均”我假设你的意思是添加位(每种颜色)并除以2(右移)。注意,如果你重复这样做(例如平均两个图像,然后用第三个平均结果,那么用第四个算法得到结果然后你最终会得到一些黑色的东西,因为右移向下舍入,所以你略微偏向于较低的值。)