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

How to correctly multiply two colors with byte components?

我想将成分为 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 颜色的正确算法是什么?

Harold 的评论对我有用:

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

我正在重新发布他的评论作为答案,以便更容易找到他的解决方案。