如何正确地将两种颜色与字节组件相乘?

时间:2017-07-11 17:39:02

标签: c# colors bit-shift multiplying

我想将两种颜色相乘,其成分为byte,但我遇到了不一致的结果。

当组件为float时,它非常简单:

float a = 1.0f;
float b = 1.0f;
float c = a * b;

当组件为byte时,我依旧记得有一些位移,但我的公式显然缺少一些东西:

byte a = 255;
byte b = 255;
byte c = (byte)((a * b) >> 8);
// 255 * 255 = 65025 then 65025 >> 8 = 254
// obviously, adding 1 to the result is just wrong

注意:

我不能使用来自流行框架(如Forms或WPF)的Color类型,因为我的项目充当了一个可以从不同框架重用的抽象层。

问题:

使用位移乘以byte颜色的正确算法是什么?

1 个答案:

答案 0 :(得分:1)

Harold的评论对我有用:

(byte)((a * b + 0xFF) >> 8)

我将他的评论作为答案,以便让他的解决方案更容易找到。