C#如何通过保留其所有结构来重新着色图像

时间:2017-10-08 00:10:30

标签: c# image colors bitmap

我想以编程方式重新着色图像,如下所示:

enter image description here

那么如果不将整个图像完全绘制成纯色,我怎么能这样做呢?

1 个答案:

答案 0 :(得分:1)

我建议将RGB(红绿蓝)颜色转换为HSB / HSV(色调饱和度亮度/色调饱和度值)颜色。然后,您可以通过更改Hue值来移动颜色。保持饱和度和值(亮度)并将其转换回RGB。

你可以得到这样的H,S,V值:

Color color = Color.FromArgb(red, green, blue);
float h = color.GetHue();
float s = color.GetSaturation();
float v = color.GetBrightness();

反向转换没有内置方式。你可以在这里找到一个C#示例:Converting HSV to RGB colour using C#。另外,如果图像具有透明部分,请不要忘记复制包含透明度信息的alpha分量。

色调以度为单位,范围从0.0f到360.0f,因此会改变这样的色调:

float delta = 120f; // Arbitrary value in the range 0.0f through 360.0f
h = (h + delta) % 360f;

另请参阅:HSL and HSV

使用C#示例的另一篇优秀文章:Manipulating colors in .NET - Part 1