首页 / 知识
关于c#:如何确定给定颜色的深色或浅色?
2023-04-17 10:55:00

How do I determine darker or lighter color variant of a given color?给定系统或用户的任何色调的源颜色,我想使用一种简单的算法来计算出所选颜色的较浅或较深的变体。 类似于Windows Live Messenger上用于设置用户界面样式的效果。 使用.net 3.5的语言是C#。 回应评论:颜色格式为(Alpha)RGB。 值以字节或浮点数表示。 标记答案:就我使用的上下文(一些简单的UI效果)而言,我标记为接受的答案实际上是此上下文中最简单的。 但是,我也放弃了对更复杂和准确的答案的投票。 任何进行更高级的色彩操作并在将来找到该线程的人都应该检查一下。 谢谢。 :)
在XNA中,有一种
这是将其扩展为
因此,使用RGB在两种颜色之间进行简单的lerp操作将是:
应用此示例的示例如下:
只需将RGB值乘以您要修改级别的数量即可。如果其中一种颜色已经达到最大值,则无法使其更亮(仍然使用HSV数学)。 这与使用HSV然后修改V所得到的结果完全相同,而数学运算要少得多。只要您不想开始失去饱和度,就可以得到与使用HSL然后修改L相同的结果。 HSV(色相/饱和度/亮度)也称为HSL(色相/饱和度/亮度)只是一种不同的颜色表示。 使用此表示法更容易调整亮度。因此,从RGB转换为HSV,加亮" V",然后转换回RGB。 下面是一些要转换的C代码
Rich Newman在他的博客中讨论了有关.NET System.Drawing.Color的HSL颜色,甚至提供了一个HSLColor类来为您完成所有工作。将您的System.Drawing.Color转换为HSLColor,针对光度添加/减去值,然后转换回System.Drawing.Color以在您的应用中使用。 您可以将颜色转换为HSL颜色空间,在此处进行处理,然后转换回您选择的颜色空间(最有可能是RGB) 较浅的颜色具有较高的L值,较深的颜色具有较低的L值。 这是相关的东西和所有方程式: http://en.wikipedia.org/wiki/HSL_color_space 另一种方法是简单地用白色或黑色插入颜色。这也会使颜色略微降低饱和度,但计算起来更便宜。 我在System.Windows.Forms中使用了ControlPaint.Dark()和.Light()。 我猜您正在使用带字节值(0到255)的RGB,因为在任何地方都很常见。
为了更亮,请用白色的RGB平均RGB值。或者,要控制多少亮度,可以按一定比例混合。设
对于较暗的情况,请使用黑色的RGB-全为零,使数学运算更容易。 我省略了一些细节,例如将结果转换回字节,这可能是您想要的。 如果您使用的是RGB颜色,则可以将此颜色参数转换为HSL(色相,饱和度,亮度),修改亮度参数,然后转换回RGB。到处都是Google,您会发现很多有关如何进行这些颜色表示转换(从RGB到HSL,反之亦然)的代码示例。
这是我很快发现的: 该网站指出,您可以在BCL C#System.Windows.Forms命名空间中使用ControlPaint类。 转换为HSV或其他颜色空间的想法似乎不错,并且对于精确的颜色工作可能是必需的,但是对于普通目的,使用RGB工作的错误可能并不重要。同样,处理边界情况可能会很痛苦:RGB是一个立方体形的空间,而HSV不是。如果使用字节值,则空间之间可以具有多对一和一对多的映射。取决于应用程序,这可能是问题,也可能不是问题。青年汽车 在HSL / HSV中更好地完成颜色的任何变化。 一个好的测试是在RGB空间和HSL空间中的两个等效值之间进行插值。 HSL空间中的坡度看起来像是自然发展。在RGB空间中,它通常看起来非常不自然。 HSL比RGB更好地映射到我们的视觉色彩空间感知。 如果您的颜色是RGB格式(或者大概是CMYK),则可以使用相当粗糙的方法来增加颜色的每个成分的值。例如,在HTML中,颜色表示为三个两位数的十六进制数字。 #ff0000将为您提供明亮的红色,然后可以通过将G和B组件的值增加相同的量来淡化,例如#ff5555(提供较浅的红色)。大概对于色相,饱和度和亮度(HSL)颜色,您可以提高L分量,但是我不能肯定地说。我对这个色彩空间不太熟悉。 正如我所说,这种方法非常粗糙。从我对Live Messenger的记忆中,听起来好像您正在尝试进行渐变,可以非常轻松地在Windows Presentation Foundation(WPF,.NET 3.0的一部分)中应用渐变。 WPF支持许多不同类型的渐变笔刷,包括线性和径向渐变。 我强烈推荐Adam Nathan的书《 Windows Presentation Foundation Unleashed》作为WPF的详尽介绍。 高温超导 假设您获得的颜色为RGB,请首先将其转换为HSV(色相,饱和度,值)颜色空间。然后增加/减少该值以产生较浅/较深的颜色阴影。然后转换回RGB。 |
最新内容
相关内容
linux关闭系统的命令?
linux关闭系统的命令?,系统,工作,命令,时间,用户,指令,通知,目的,终端,表示,详解Linux系统中关机与重启相关命令的用法打开这里的LINUX,UBUNTUlinux系统nl命令?
linux系统nl命令?,系统,工作,命令,信息,文件,标准,工具,单位,公式,内容,nl是什么意思?女生说nl的意思是:常规的恋爱。“nl”是“NormalLove”的linux命令删除用户组?
linux命令删除用户组?,管理,密码,系统,用户组,用户,概念,命令,文件,管理员,工作组,Linux命令之用户组管理1、查看/etc/group文件,只存在名称为mlinux命令修复系统?
linux命令修复系统?,系统,地址,时间,工作,数据,一致,第一,工具,流程,命令,当LINUX文件系统受到破坏时,如何检查和修复系统?chkdsk。chkdsk的全linux更新系统的命令?
linux更新系统的命令?,系统,工作,单位,管理,信息,命令,地址,基础,数据,工具,linux必学的60个命令安装和登录命令:login、shutdown、halt、reboolinux系统开发命令?
linux系统开发命令?,工作,系统,地址,信息,命令,目录,数据,管理,单位,功能,Windows10系统下使用Linux命令的详细方法在 Windows 10 中使用 Linulinux设置命令行长度?
linux设置命令行长度?,系统,工作,信息,地址,命令,工具,异常,管理,目录,文件,linux日志显示长度,设置命令tail -n 1000:显示最后1000行 tail -nlinux系统命令awk?
linux系统命令awk?,数据,系统,工具,基础,标准,名称,单位,命令,文本,语法,Linux三剑客awk命令篇二:命令操作符1、语法格式:(1) Awk完整语法 awklinux命令行退出系统?
linux命令行退出系统?,系统,工作,时间,地址,信息,命令,软件,工具,发行,电脑,怎样登录和退出Linux系统我们先mysql -hlocalhost -uroot -p看看linux系统命令vim?
linux系统命令vim?,系统,工作,发行,模式,连续,工具,官方网站,状态,环境,时间,linux中在vim编辑器中使用date命令1、vim显示历史命令,先按q,再按:qlinux中用户创建命令?
linux中用户创建命令?,密码,系统,用户,软件,命令,联系方式,管理,信息,用户名,新用户,linux怎么添加用户1、打开xshell软件,远程访问您的服务器linux设置代替命令?
linux设置代替命令?,系统,地址,网络,工作,软件,工具,服务,信息,命令,别名,linux系统怎样设置命令别名可将设置别名的命令写进启动文件内,这样,每