- Understanding Color
- Using Color
- Color Models
- Color in the .NET Framework
Color in the .NET Framework
As you'd expect, color is represented by an object in the .NET Framework; in this case, a structure rather than a class, the Color structure in the System.Drawing namespace.
The Color structure is supported by the KnownColor enumeration and the SystemColor and ColorTranslator classes, all also part of System.Drawing.
The Color Structure
The Color structure exposes three static methods that function as pseudo-constructors, as shown in Table 4-1.
Table 4-1. Color Pseudo-Constructors
Method |
Description |
---|---|
FromArgb |
Creates a Color structure from its ARGB component values |
FromKnownColor |
Creates a Color structure representing the specified member of the KnownColor enumeration |
FromName |
Creates a Color structure representing the member of the KnownColor enumeration specified its name (passed as a String) |
The FromArgb method is overloaded, exposing four different versions that allow you to specify various combinations of the ARGB component values. The FromKnownColor and FromName versions create a Color structure based on the KnownColor enumeration.
As shown in Listing 4-1, you pass the enumeration member directly to the FromKnownColor method, and the name of the color, as a string, to the FromName method.
Example 4-1. Two methods for creating a Color structure based on the KnownColor enumeration
Dim clrEnum As Color, clrName As Color clrEnum = Color.FromKnownColor(KnownColor.Beige) clrName = Color.FromName("Beige")
In addition to the pseudo-constructors, the Color structure exposes five methods that are useful for translating between various color models, as shown in Table 4-2.
Table 4-2. Color Structure Translation Methods
Method |
Description |
---|---|
GetHue |
Returns the HSB hue in degrees |
GetSaturation |
Returns the HSB saturation percentage as a value between 0 and 1 |
GetBrightness |
Returns the HSB brightness percentage as a value between 0 and 1 |
ToArgb |
Returns the 32-bit ARGB value representing the color |
ToKnownColor |
Returns a member of the KnownColor enumeration if one was used to create the color; otherwise, returns zero |
You can't create a Color directly from the HSB model in the .NET Framework, although as we'll see, the Visual Studio color picker allows it.
In addition to its methods, the Color structure exposes two sets of properties. The first set, shown in Table 4-3, provides information regarding the Color.
Table 4-3. Color Structure Properties
Properties |
Description |
---|---|
A |
Alpha component value |
R |
Red component value |
G |
Green component value |
B |
Blue component value |
IsKnownColor |
Indicates whether the color was created from the KnownColor enumeration |
IsNamedColor |
Indicates whether the color was created from the KnownColor enumeration |
IsSystemColor |
Indicates whether the color was created from one of the first 26 members of the KnownColor enumeration |
Name |
The name of a known color |
The A, R, G, and B properties should be self-explanatory, as should the Name property.
The IsKnownColor and IsNamedColor properties, which always return the same value, indicate whether the Color structure was created from a KnownColor using either the FromKnownColor or FromName method. These properties will not return true if the ARGB value of a Color happens to match that of a member of the KnownColor enumerationthey don't perform a search or compare ARGB values.
The IsSystemColor property indicates whether the Color is one of the colors set by the user in the control panel. As we'll see in the next section, SystemColors are represented by the first 26 members of the KnownColor enumeration.
The sample program for this chapter includes a form that displays each of these properties for the KnownColors.
The other set of Color properties match the values of the KnownColor enumeration. These static properties allow you to quickly create an instance of one of the known colors.
Listing 4-2, a reprise of Listing 4-1, uses the static Beige property to create a third instance of the Color structure.
Example 4-2. Using a static property to obtain an instance of a Color structure
Dim clrEnum As Color, clrName As Color, clrStatic as Color clrEnum = Color.FromKnownColor(KnownColor.Beige) clrName = Color.FromName("Beige") clrStatic = Color.Beige
Known and System Colors
The .NET Framework supports a set of 140 standard colors through its KnownColor enumeration (and the related static properties of the Color structure).
These colors, which are listed in Table 4-4, were proposed, but not included, in the CSS standard, although they do not coincide with the so-called Web Safe color range. Despite this, they do represent a de facto HTML standard, and they're supported by recent versions of both of the two main browsers, Internet Explorer and Netscape Navigator.
Table 4-4. The KnownColor Enumeration
AliceBlue |
DarkSlateGray |
LightSalmon |
PaleVioletRed |
AntiqueWhite |
DarkTurquoise |
LightSeaGreen |
PapayaWhip |
Aqua |
DarkViolet |
LightSkyBlue |
PeachPuff |
Aquamarine |
DeepPink |
LightSlateGray |
Peru |
Azure |
DeepSkyBlue |
LightSteelBlue |
Pink |
Beige |
DimGray |
LightYellow |
Plum |
Bisque |
DodgerBlue |
Lime |
PowderBlue |
Black |
Firebrick |
LimeGreen |
Purple |
BlanchedAlmond |
FloralWhite |
Linen |
Red |
Blue |
ForestGreen |
Magenta |
RosyBrown |
BlueViolet |
Fuschia |
Maroon |
RoyalBlue |
Brown |
Gainsboro |
MediumAquamarine |
SaddleBrown |
BurlyWood |
GhostWhite |
MediumBlue |
Salmon |
CadetBrown |
Gold |
MediumOrchid |
SandyBrown |
Chartreuse |
Goldenrod |
MediumPurple |
SeaGreen |
Chocolate |
Gray |
MediumSeaGreen |
SeaShell |
Coral |
Green |
MediumSlateBlue |
Sienna |
CornflowerBlue |
GreenYellow |
MediumSpringGreen |
Silver |
Cornsilk |
Honeydew |
MediumTurquoise |
SkyBlue |
Crimson |
HotPink |
MediumVioletRed |
SlateGray |
Cyan |
IndianRed |
MidnightBlue |
Snow |
DarkBlue |
Indigo |
MintCream |
SpringGreen |
DarkCyan |
Ivory |
MistyRose |
SteelBlue |
DarkGoldenrod |
Khaki |
Moccasin |
Tan |
DarkGrey |
Lavender |
NavajoWhite |
Teal |
DarkGreen |
LavenderBlush |
Navy |
Thistle |
DarkKhaki |
LawnGreen |
OldLace |
Tomato |
DarkMagenta |
LemonChiffon |
Olive |
Transparent |
DarkOliveGreen |
LightBlue |
OliveDrab |
Turquoise |
DarkOrange |
LightCoral |
Orange |
Violet |
DarkOrchid |
LightCyan |
OrangeRed |
Wheat |
DarkRed |
LightGoldenrodYellow |
Orchid |
White |
DarkSalmon |
LightGray |
PaleGoldenRod |
WhiteSmoke |
DarkSeaGreen |
LightGreen |
PaleGreen |
Yellow |
DarkSlateBlue |
LightPink |
PaleTurquoise |
YellowGreen |
While it must be said that some of these colors are spectacularly ugly, the .NET Framework does make them easy to access. For example, Listing 4-3, excerpted from the chapter's example program, demonstrates how to read the names of the KnownColor enumeration into an array, and then display that list in a ListBox control.
Example 4-3. Reading the names of the KnownColor enumeration into an array
Dim theNamedColors() as String theNamedColors = System.Enum.GetNames(GetType(KnownColor)) Me.theListBox.Items.AddRange(theNamedColors)
The KnownColor enumeration also includes 26 colors (in positions 0 to 25) that correspond to the static properties of the SystemColors class, shown in Table 4-5.
Table 4-5. SystemColors Properties
Property |
Description |
---|---|
ActiveBorder |
The color of the active window's border |
ActiveCaption |
The color of the background of the active window's title bar |
ActiveCaptionText |
The color of the text in the active window's title bar |
AppWorkspace |
The color of the background of the application workspace (the area in a MDI view that is not occupied by documents) |
Control |
The color of the face color of a 3-D element |
ControlDark |
The color of the shadow color of a 3-D element |
ControlDarkDark |
The color of the dark shadow color of a 3-D element |
ControlLight |
The color of the light color of a 3-D element |
ControlLightLight |
The color of the lightest color of a 3-D element |
ControlText |
The color of the text in a 3-D element |
Desktop |
The color of the operating system desktop |
GrayText |
The color of dimmed (disabled) text |
Highlight |
The color of the background of selected items |
HighlightText |
The color of the text of selected items |
HotTrack |
The color used to designate a hot track item (hot track items are activated by a single click) |
InactiveBorder |
The color of an inactive window's border |
InactiveCaption |
The color of the background of an inactive window's title bar |
InactiveCaptionText |
The color of the text of an inactive window's title bar |
Info |
The color of the background of a ToolTip |
InfoText |
The color of the text of a ToolTip |
Menu |
The color of a menu's background |
MenuText |
The color of the text of a menu |
Window |
The color of the background of the client area of a window |
WindowFrame |
The color of the window frame |
WindowText |
The color of the text in the client area of a window |
Like SystemPens and SystemBrushes, the System Colors class represents the ambient properties set by the user in the control panel.
Other Supporting Classes
Two additional .NET Framework classes are of use when working with color: the ColorTranslator class and the ControlPaint class.
The ColorTranslator class does exactly what you might expect. It provides methods to translate a .NET Framework Color structure to an HTML color, an OLE color, or a Win32 color, and back, as shown in Table 4-6.
Table 4-6. ColorTranslator Methods
Method |
Description |
---|---|
FromHtml |
Creates a Color structure from an HTML color |
FromOle |
Creates a Color structure from an OLE color value |
FromWin32 |
Creates a Color structure from a Win32 color value |
ToHtml |
Translates a Color structure into an HTML color string |
ToOle |
Translates a Color structure into an OLE color value |
ToWin32 |
Translates a Color structure into a Win32 color value |
The ToHtml method is particularly useful when combined with a SystemColor. Instead of returning the color name, it returns the CSS name of the System element.
Finally, the ControlPaint class, which we examined in Chapter 2, .NET Graphic Objects, provides four methods for manipulating the value of a color, as shown in Table 4-7.
Table 4-7. ControlPaint Color Methods
Method |
Description |
---|---|
Dark |
Returns ControlDark if the color is a SystemColor; otherwise, creates a new, darker version of the specified color |
DarkDark |
Returns ControlDarkDark if the color is a SystemColor; otherwise, returns a new, darker version of the specified color |
Light |
Returns ControlLight if the color is a SystemColor; otherwise, returns a new, lighter version of the specified color |
LightLight |
Returns ControlLightLight if the color is a SystemColor; otherwise, returns a new, lighter version of the specified color |
These four methods can be used to easily create a set of colors for drawing three-dimensional objects, provided the base color isn't one of the SystemColors.
The Dark and Light methods optionally allow you specify a percentage value that indicates the amount by which the value is to change. Using this capability, you can create an entire suite of shaded (or tinted) hues with which to achieve some very sophisticated effects.
In the next chapter, the last in Part I, we'll examine the classes that the .NET Framework provides for manipulating images.