颜色转换

时间:2014-04-20 12:10:04

标签: c++ algorithm colors

我的程序从png文件读取许多字母。这些字母是黑色的白色bg,如下图所示。

enter image description here

我希望我的程序给定这些字母的颜色值能够以任何背景颜色打印任何文本颜色的字母。例如,我想要显示' a'在蓝色背景中使用绿色文本。


使用以下代码我可以将文本颜色更改为任何颜色:

Color c;
c.r = original_black.r + ((255 - original_black.r) / 255.0) * desired_colour.r;
c.g = original_black.g + ((255 - original_black.g) / 255.0) * desired_colour.g;
c.b = original_black.b + ((255 - original_black.b) / 255.0) * desired_colour.b;

结果:

enter image description here

问题:如何更新上述代码以将bg颜色更改为任何颜色,如下所示:

enter image description here

1 个答案:

答案 0 :(得分:0)

初始图片包含不同的颜色(可能与LCD显示器的ClearType像素渲染一样)。对于所有前后颜色组合,很难为彩色边缘像素选择一种可接受的方式 所以我建议将初始图片的颜色转换为灰度级。其中一个可能的公式:

Y = 0.299 R + 0.587 G + 0.114 B  [0..255 range]

并将此值用作Alpha混合中的alpha

c.r = (foreground.r * Y  + (255 - Y) * background.r) / 255

等等