语言无关 – 可以通过平均混合8位颜色吗?

我有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,>>是按位向右移位,<

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

但是,如果你的每种颜色限制为2位,那么这一切都不会真正重要,你的建议很好(除了,如评论中所述,你需要&,而不是^,来掩盖).

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

点赞