如何将 RGB 颜色转换为 HSV?
如何使用 C# 将 RGB 颜色转换为 HSV?
我一直在寻找一种无需使用任何外部库的快速方法。
How can I convert a RGB Color to HSV using C#?
I've searched for a fast method without using any external library.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
请注意,
Color.GetSaturation()
和Color.GetBrightness()
返回 HSL 值,而不是 HSV。下面的代码演示了其中的区别。
以下 C# 代码就是您想要的。 它使用 Wikipedia 上描述的算法在 RGB 和 HSV 之间进行转换。
hue
的范围为 0 - 360,saturation
或value
的范围为 0 - 1。Note that
Color.GetSaturation()
andColor.GetBrightness()
return HSL values, not HSV.The following code demonstrates the difference.
The following C# code is what you want. It converts between RGB and HSV using the algorithms described on Wikipedia. The ranges are 0 - 360 for
hue
, and 0 - 1 forsaturation
orvalue
.您是否考虑过简单地使用 System.Drawing 命名空间? 例如:
请注意,这并不完全是您所要求的(请参阅HSL 和 HSV 之间的差异 并且 Color 类没有从 HSL/HSV 转换回来,但后者是合理的 易于添加。
Have you considered simply using System.Drawing namespace? For example:
Note that it's not exactly what you've asked for (see differences between HSL and HSV and the Color class does not have a conversion back from HSL/HSV but the latter is reasonably easy to add.
EasyRGB 有许多色彩空间转换。 这是 RGB->HSV 的代码转换。
The EasyRGB has many color space conversions. Here is the code for the RGB->HSV conversion.
这里有一个 C 实现:
http://www.cs.rit.edu/ ~ncs/color/t_convert.html
转换为 C# 应该非常简单,因为几乎没有调用任何函数 - 只是计算。
通过 Google 找到
There's a C implementation here:
http://www.cs.rit.edu/~ncs/color/t_convert.html
Should be very straightforward to convert to C#, as almost no functions are called - just calculations.
found via Google
这是从 BlaM 帖子中的 C 代码移植而来的 VB.net 版本,对我来说工作得很好。
This is the VB.net version which works fine for me ported from the C code in BlaM's post.
我因为有同样的需求而来到这里。
下面我将分享迄今为止我能找到的最好、最简单的解决方案。
这是 Greg 的修改答案(在这里找到); 但具有更简单且易于理解的代码。
对于那些正在学习的人,我添加了一些参考资料,为了理解,值得检查。
参考资料
代码
I've ended up here by having the same need.
Bellow I'm sharing the best and simpler solution I could find so far.
This is a modified answer from Greg's (found here); but with a humbler and understandable code.
For those who are learning I've added a few references that are worth checking for the sake of understanding.
References
Code
首先:确保你有一个颜色作为位图,如下所示:
(e来自选择我的颜色的事件处理程序!)
不久前遇到这个问题时我做了什么,我首先得到了rgba(红色,绿色,蓝色和 alpha)值。
接下来我创建了 3 个浮动:浮动色调、浮动饱和度、浮动亮度。 然后您只需执行
以下操作: 整个过程如下所示:
如果您现在想在标签中显示它们,只需执行以下操作:
好了,您现在已将 RGB 值转换为 HSV 值:)
希望这会有所帮助
FIRST: make sure you have a color as a bitmap, like this:
(e is from the event handler wich picked my color!)
What I did when I had this problem a whilke ago, I first got the rgba (red, green, blue and alpha) values.
Next I created 3 floats: float hue, float saturation, float brightness. Then you simply do:
The whole lot looks like this:
If you now want to display them in a label, just do:
Here you go, you now have RGB Values into HSV values :)
Hope this helps