/**************************************************************************\ | |
* | |
* Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. | |
* | |
* Module Name: | |
* | |
* GdiplusColor.h | |
* | |
* Abstract: | |
* | |
* Represents a GDI+ color. | |
* | |
\**************************************************************************/ | |
#ifndef _GDIPLUSCOLOR_H | |
#define _GDIPLUSCOLOR_H | |
//---------------------------------------------------------------------------- | |
// Color mode | |
//---------------------------------------------------------------------------- | |
enum ColorMode | |
{ | |
ColorModeARGB32 = 0, | |
ColorModeARGB64 = 1 | |
}; | |
//---------------------------------------------------------------------------- | |
// Color Channel flags | |
//---------------------------------------------------------------------------- | |
enum ColorChannelFlags | |
{ | |
ColorChannelFlagsC = 0, | |
ColorChannelFlagsM, | |
ColorChannelFlagsY, | |
ColorChannelFlagsK, | |
ColorChannelFlagsLast | |
}; | |
//---------------------------------------------------------------------------- | |
// Color | |
//---------------------------------------------------------------------------- | |
class Color | |
{ | |
public: | |
Color() | |
{ | |
Argb = (ARGB)Color::Black; | |
} | |
// Construct an opaque Color object with | |
// the specified R, G, B values. | |
Color(IN BYTE r, | |
IN BYTE g, | |
IN BYTE b) | |
{ | |
Argb = MakeARGB(255, r, g, b); | |
} | |
// Construct a Color object with | |
// the specified A, R, G, B values. | |
// | |
// NOTE: R, G, B color values are not premultiplied. | |
Color(IN BYTE a, | |
IN BYTE r, | |
IN BYTE g, | |
IN BYTE b) | |
{ | |
Argb = MakeARGB(a, r, g, b); | |
} | |
// Construct a Color object with | |
// the specified ARGB values. | |
// | |
// NOTE: R, G, B color components are not premultiplied. | |
Color(IN ARGB argb) | |
{ | |
Argb = argb; | |
} | |
// Extract A, R, G, B components | |
BYTE GetAlpha() const | |
{ | |
return (BYTE) (Argb >> AlphaShift); | |
} | |
BYTE GetA() const | |
{ | |
return GetAlpha(); | |
} | |
BYTE GetRed() const | |
{ | |
return (BYTE) (Argb >> RedShift); | |
} | |
BYTE GetR() const | |
{ | |
return GetRed(); | |
} | |
BYTE GetGreen() const | |
{ | |
return (BYTE) (Argb >> GreenShift); | |
} | |
BYTE GetG() const | |
{ | |
return GetGreen(); | |
} | |
BYTE GetBlue() const | |
{ | |
return (BYTE) (Argb >> BlueShift); | |
} | |
BYTE GetB() const | |
{ | |
return GetBlue(); | |
} | |
// Retrieve ARGB values | |
ARGB GetValue() const | |
{ | |
return Argb; | |
} | |
VOID SetValue(IN ARGB argb) | |
{ | |
Argb = argb; | |
} | |
VOID SetFromCOLORREF(IN COLORREF rgb) | |
{ | |
Argb = MakeARGB(255, GetRValue(rgb), GetGValue(rgb), GetBValue(rgb)); | |
} | |
COLORREF ToCOLORREF() const | |
{ | |
return RGB(GetRed(), GetGreen(), GetBlue()); | |
} | |
public: | |
// Standard color constants | |
enum | |
{ | |
Black = 0xff000000, | |
Silver = 0xffc0c0c0, | |
Gray = 0xff808080, | |
White = 0xffffffff, | |
Maroon = 0xff800000, | |
Red = 0xffff0000, | |
Purple = 0xff800080, | |
Fuchsia = 0xffff00ff, | |
Green = 0xff008000, | |
Lime = 0xff00ff00, | |
Olive = 0xff808000, | |
Yellow = 0xffffff00, | |
Navy = 0xff000080, | |
Blue = 0xff0000ff, | |
Teal = 0xff008080, | |
Aqua = 0xff00ffff | |
}; | |
// Shift count and bit mask for A, R, G, B components | |
enum | |
{ | |
AlphaShift = 24, | |
RedShift = 16, | |
GreenShift = 8, | |
BlueShift = 0 | |
}; | |
enum | |
{ | |
AlphaMask = 0xff000000, | |
RedMask = 0x00ff0000, | |
GreenMask = 0x0000ff00, | |
BlueMask = 0x000000ff | |
}; | |
// Assemble A, R, G, B values into a 32-bit integer | |
static ARGB MakeARGB(IN BYTE a, | |
IN BYTE r, | |
IN BYTE g, | |
IN BYTE b) | |
{ | |
return (((ARGB) (b) << BlueShift) | | |
((ARGB) (g) << GreenShift) | | |
((ARGB) (r) << RedShift) | | |
((ARGB) (a) << AlphaShift)); | |
} | |
protected: | |
ARGB Argb; | |
}; | |
#endif | |