2012-07-11 47 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(右移)。注意,如果你重複執行這些操作(例如平均兩個圖像,然後用第三個平均值計算結果,然後將結果與第四個結果平均),那麼你最終會得到黑色的東西,因爲右移向下,所以你稍微偏向於更低的值)。