|
|
/**************************************************************************\
* * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. * * Module Name: * * Color * * Abstract: * * Represents a GDI+ color. * * Revision History: * * 10/13/1999 agodfrey * Moved it out of GdiplusTypes.h * \**************************************************************************/
#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
|