2017-10-08 33 views
0

我想以编程方式重新着色图片重新着色的图像,如下图所示:C#如何在保持其所有的结构

enter image description here

所以,我该怎么办,如果没有整个图像完全画一个实心颜色?

+0

你可能想看看ColorMatrix。 – TaW

回答

1

我建议将RGB(红绿蓝)颜色转换为HSB/HSV(色相饱和度亮度/色调饱和度)颜色。然后,您可以通过更改色相值来移动颜色。保持饱和度和数值(亮度)并将其转换回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

+0

嗯好吧,但它似乎画了整个图像,所以空的部分也充满了颜色。这应该不是这样的...... – Craiy

+0

那么这可能是我的错,因为我为每个像素着色,但有没有什么办法可以获得图像中实际使用的所有像素? – Craiy

+0

不,黑色仍然是黑色和白色保持白色。即,它不使图像着色,而只是改变现有的颜色。 –

相关问题