【问题标题】:Can 8-bit color be blended via averaging?可以通过平均来混合 8 位颜色吗?
【发布时间】:2012-07-12 09:49:34
【问题描述】:

我有 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 是混合颜色,^ 是按位与,&gt;&gt; 是按位右移,&lt;&lt; 是按位左移, xxxxxxxxB 是二进制数,avg( a , b ) 是算术平均值。

【问题讨论】:

  • 对于你需要&amp;,而不是^的掩蔽。

标签: language-agnostic colors color-blending


【解决方案1】:

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

但是,如果您将每种颜色限制为 2 位,那么这一切都不是很重要,而且您的建议很好(除非,如 cmets 中所述,您需要 &amp;,而不是 ^ , 屏蔽)。

(“平均”我假设您的意思是添加位(每种颜色)并除以 2(右移)。请注意,如果您重复执行此操作(例如,平均两个图像,然后将结果与第三个平均,然后将结果与第四个进行平均)然后你最终会得到一些黑色的东西,因为右移向下舍入,所以你稍微偏向于较低的值)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 2016-09-08
    • 2011-02-02
    • 2012-12-19
    • 2010-10-19
    相关资源
    最近更新 更多