答案 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