Use both RGB and HSB color schemas in your .NET application using HSBColor class






3.92/5 (12 votes)
Aug 17, 2005
1 min read

97817

1714
This class helps to convert RGB colors to HSB and back.
Introduction
.NET Framework provides implementation of the Color
class and several satellite classes like KnownColor
and SystemColors
. But all of them are based on ARGB schema. And this is logical, since Windows itself is based on it. But in many cases ARGB is not very useful. For example, you want to use a color that is slightly brighter than a specific system color. For this kind of manipulation you need a different color coding, like HSB (Hue-Saturation-Brightness).
System.Color
class provides us these values, but unfortunately it can’t be recreated using them. The purpose of the class I’m going to present in this article is to provide an ability to convert from RGB to HSB and back.
Here is the signature of the class:
using System;
namespace TTRider.UI
{
public struct HSBColor
{
public HSBColor(System.Drawing.Color color);
public HSBColor(float h, float s, float b);
public HSBColor(int a, float h, float s, float b);
public int A { get; }
public float H { get; }
public float S { get; }
public float B { get; }
public System.Drawing.Color Color { get; }
public static HSBColor FromColor(System.Drawing.Color color);
public static System.Drawing.Color FromHSB(HSBColor hsbColor);
public static System.Drawing.Color ShiftBrighness(
System.Drawing.Color c, float brightnessDelta);
public static System.Drawing.Color ShiftHue(
System.Drawing.Color c, float hueDelta);
public static System.Drawing.Color ShiftSaturation(
System.Drawing.Color c, float saturationDelta);
}
}
As you can see, you can create an instance of this struct
using System.Color
class or just use the Hue, Saturation and Brightness values.
Be aware! You can't use these values from the Color
class. Looks like .NET uses different conversion formulas. The valid range of each component is 0:255. Looks like System.Color
uses the range from 0:1 for Brightness and Saturation. There are several helpful static members like ShiftHue
, ShiftSaturation
and ShiftBrightness
to manipulate your System.Color
class.
You can look into the implementation of this class in the source files. It is straightforward.