Llo*_*ell 39 .net c# colors system.drawing.color invert
我知道这不会直接反转颜色,它会"反对"它.我想知道是否有人知道一种简单的方法(几行代码)来反转任何给定颜色的颜色?
目前我有这个(这不完全是反转的定义,因为如果我传递灰色/灰色,它将返回非常相似的东西,例如127,127,127):
const int RGBMAX = 255;
Color InvertMeAColour(Color ColourToInvert)
{
return Color.FromArgb(RGBMAX - ColourToInvert.R,
RGBMAX - ColourToInvert.G, RGBMAX - ColourToInvert.B);
}
Run Code Online (Sandbox Code Playgroud)
Thi*_*hib 47
这取决于你"反转"一种颜色是什么意思
您的代码提供"负面"颜色.
您是在寻找青色的变换红色,紫色的绿色,黄色的蓝色(等等)?如果是这样,您需要在HSV模式下转换RGB颜色(您可以在此处找到进行转换).
然后你只需要反转色彩值(变动Hue的360-Hue),并重新转换为RGB模式.
编辑:亚历克斯Semeniuk提到,改变Hue由(Hue + 180) % 360是更好的解决方案(它不倒置色调,但发现在色环相反的颜色)
小智 23
您可以使用 :
MyColor=Color.FromArgb(MyColor.ToArgb()^0xffffff);
Run Code Online (Sandbox Code Playgroud)
它将反转MyColor.
kor*_*ona 11
试试这个:
uint InvertColor(uint rgbaColor)
{
return 0xFFFFFF00u ^ rgbaColor; // Assumes alpha is in the rightmost byte, change as needed
}
Run Code Online (Sandbox Code Playgroud)
分别反转每个组件的位:
Color InvertMeAColour(Color ColourToInvert)
{
return Color.FromArgb((byte)~ColourToInvert.R, (byte)~ColourToInvert.G, (byte)~ColourToInvert.B);
}
Run Code Online (Sandbox Code Playgroud)
编辑:〜运算符不能自动处理字节,需要强制转换.
你已经拥有的是RGB-Invert.还有其他方法可以对颜色进行分类,从而对颜色的反转进行其他定义.
但听起来好像你想要一个对比色,并没有一个简单的反转适用于所有颜色,包括RGB(127,127,127).
您需要的是1)转换为HSV(参见ThibThibs答案)并反转Hue,但也2)检查Hue是否不接近中间,如果是,则转到完全明亮或完全黑暗.
小智 5
如果要更改每种颜色,请尝试旋转功能(移位或添加)而不是翻转功能(反转).换句话说,考虑要包装的每种颜色(红色,绿色和蓝色)的0到255范围,在尖端处连接,如值圆.然后通过添加一些值并执行mod 256来移动每个颜色.例如,如果红色的起始值为255,并且您添加1,则得到0.如果将所有三种颜色移动128,则会发生显着不同图片中每种原始颜色的值,甚至是灰色.灰色127,127,127变为白色255,255,255.灰色128,128,128变为黑色0,0,0.有一种类似于Solarization的摄影效果,由Man Ray在20世纪30年代偶然发现.
您还可以对每种颜色(红色,绿色,蓝色)进行不同量的旋转操作,以真正弄乱图片.
您还可以在色调上进行旋转操作,在色调圆上将每种原始色调的色调移动一些,这会改变所有颜色而不会改变亮度,因此阴影仍然看起来像阴影,使人看起来像辛普森或Smurphs例.
128的班次代码可能如下所示:
public static Color Invert(this Color c) => Color.FromArgb(c.R.Invert(), c.G.Invert(), c.B.Invert());
public static byte Invert(this byte b) {
unchecked {
return (byte)(b + 128);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
64196 次 |
| 最近记录: |