• Create BookmarkCreate Bookmark
  • Create Note or TagCreate Note or Tag
  • PrintPrint
Share this Page URL
Help

Chapeter 4. Color > 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
MethodDescription
FromArgbCreates a Color structure from its ARGB component values
FromKnownColorCreates a Color structure representing the specified member of the KnownColor enumeration
FromNameCreates 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.

Listing 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
MethodDescription
GetHueReturns the HSB hue in degrees
GetSaturationReturns the HSB saturation percentage as a value between 0 and 1
GetBrightnessReturns the HSB brightness percentage as a value between 0 and 1
ToArgbReturns the 32-bit ARGB value representing the color
ToKnownColorReturns a member of the KnownColor enumeration if one was used to create the color; otherwise, returns zero


NOTE

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
PropertiesDescription
AAlpha component value
RRed component value
GGreen component value
BBlue component value
IsKnownColorIndicates whether the color was created from the KnownColor enumeration
IsNamedColorIndicates whether the color was created from the KnownColor enumeration
IsSystemColorIndicates whether the color was created from one of the first 26 members of the KnownColor enumeration
NameThe 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 enumeration—they 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.

Listing 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
AliceBlueDarkSlateGrayLightSalmonPaleVioletRed
AntiqueWhiteDarkTurquoiseLightSeaGreenPapayaWhip
AquaDarkVioletLightSkyBluePeachPuff
AquamarineDeepPinkLightSlateGrayPeru
AzureDeepSkyBlueLightSteelBluePink
BeigeDimGrayLightYellowPlum
BisqueDodgerBlueLimePowderBlue
BlackFirebrickLimeGreenPurple
BlanchedAlmondFloralWhiteLinenRed
BlueForestGreenMagentaRosyBrown
BlueVioletFuschiaMaroonRoyalBlue
BrownGainsboroMediumAquamarineSaddleBrown
BurlyWoodGhostWhiteMediumBlueSalmon
CadetBrownGoldMediumOrchidSandyBrown
ChartreuseGoldenrodMediumPurpleSeaGreen
ChocolateGrayMediumSeaGreenSeaShell
CoralGreenMediumSlateBlueSienna
CornflowerBlueGreenYellowMediumSpringGreenSilver
CornsilkHoneydewMediumTurquoiseSkyBlue
CrimsonHotPinkMediumVioletRedSlateGray
CyanIndianRedMidnightBlueSnow
DarkBlueIndigoMintCreamSpringGreen
DarkCyanIvoryMistyRoseSteelBlue
DarkGoldenrodKhakiMoccasinTan
DarkGreyLavenderNavajoWhiteTeal
DarkGreenLavenderBlushNavyThistle
DarkKhakiLawnGreenOldLaceTomato
DarkMagentaLemonChiffonOliveTransparent
DarkOliveGreenLightBlueOliveDrabTurquoise
DarkOrangeLightCoralOrangeViolet
DarkOrchidLightCyanOrangeRedWheat
DarkRedLightGoldenrodYellowOrchidWhite
DarkSalmonLightGrayPaleGoldenRodWhiteSmoke
DarkSeaGreenLightGreenPaleGreenYellow
DarkSlateBlueLightPinkPaleTurquoiseYellowGreen


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.

Listing 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
PropertyDescription
ActiveBorderThe color of the active window's border
ActiveCaptionThe color of the background of the active window's title bar
ActiveCaptionTextThe color of the text in the active window's title bar
AppWorkspaceThe color of the background of the application workspace (the area in a MDI view that is not occupied by documents)
ControlThe color of the face color of a 3-D element
ControlDarkThe color of the shadow color of a 3-D element
ControlDarkDarkThe color of the dark shadow color of a 3-D element
ControlLightThe color of the light color of a 3-D element
ControlLightLightThe color of the lightest color of a 3-D element
ControlTextThe color of the text in a 3-D element
DesktopThe color of the operating system desktop
GrayTextThe color of dimmed (disabled) text
HighlightThe color of the background of selected items
HighlightTextThe color of the text of selected items
HotTrackThe color used to designate a hot track item (hot track items are activated by a single click)
InactiveBorderThe color of an inactive window's border
InactiveCaptionThe color of the background of an inactive window's title bar
InactiveCaptionTextThe color of the text of an inactive window's title bar
InfoThe color of the background of a ToolTip
InfoTextThe color of the text of a ToolTip
MenuThe color of a menu's background
MenuTextThe color of the text of a menu
WindowThe color of the background of the client area of a window
WindowFrameThe color of the window frame
WindowTextThe 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
MethodDescription
FromHtmlCreates a Color structure from an HTML color
FromOleCreates a Color structure from an OLE color value
FromWin32Creates a Color structure from a Win32 color value
ToHtmlTranslates a Color structure into an HTML color string
ToOleTranslates a Color structure into an OLE color value
ToWin32Translates 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
MethodDescription
DarkReturns ControlDark if the color is a SystemColor; otherwise, creates a new, darker version of the specified color
DarkDarkReturns ControlDarkDark if the color is a SystemColor; otherwise, returns a new, darker version of the specified color
LightReturns ControlLight if the color is a SystemColor; otherwise, returns a new, lighter version of the specified color
LightLightReturns 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.

  • Creative Edge
  • Create BookmarkCreate Bookmark
  • Create Note or TagCreate Note or Tag
  • PrintPrint