Home > Articles > Programming > User Interface (UI)

  • Print
  • + Share This
This chapter is from the book

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 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.

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.

  • + Share This
  • 🔖 Save To Your Account