www.pudn.com > GdiplusTest16.zip > GdiPlusColor.h


/**************************************************************************\ 
* 
* Copyright (c) 1998-2001, Microsoft Corp.  All Rights Reserved. 
* 
* Module Name: 
* 
*   GdiplusColor.h 
* 
* Abstract: 
* 
*   GDI+ Color Object 
* 
\**************************************************************************/ 
 
#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 Red, Green, Blue values. 
    // 
    // Color values are not premultiplied. 
 
    Color(IN BYTE r, 
          IN BYTE g, 
          IN BYTE b) 
    { 
        Argb = MakeARGB(255, r, g, b); 
    } 
 
    Color(IN BYTE a, 
          IN BYTE r, 
          IN BYTE g, 
          IN BYTE b) 
    { 
        Argb = MakeARGB(a, r, g, b); 
    } 
 
    Color(IN ARGB argb) 
    { 
        Argb = argb; 
    } 
 
    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(); 
    } 
 
    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: 
 
    // Common color constants 
     
    enum 
    { 
        AliceBlue            = 0xFFF0F8FF, 
        AntiqueWhite         = 0xFFFAEBD7, 
        Aqua                 = 0xFF00FFFF, 
        Aquamarine           = 0xFF7FFFD4, 
        Azure                = 0xFFF0FFFF, 
        Beige                = 0xFFF5F5DC, 
        Bisque               = 0xFFFFE4C4, 
        Black                = 0xFF000000, 
        BlanchedAlmond       = 0xFFFFEBCD, 
        Blue                 = 0xFF0000FF, 
        BlueViolet           = 0xFF8A2BE2, 
        Brown                = 0xFFA52A2A, 
        BurlyWood            = 0xFFDEB887, 
        CadetBlue            = 0xFF5F9EA0, 
        Chartreuse           = 0xFF7FFF00, 
        Chocolate            = 0xFFD2691E, 
        Coral                = 0xFFFF7F50, 
        CornflowerBlue       = 0xFF6495ED, 
        Cornsilk             = 0xFFFFF8DC, 
        Crimson              = 0xFFDC143C, 
        Cyan                 = 0xFF00FFFF, 
        DarkBlue             = 0xFF00008B, 
        DarkCyan             = 0xFF008B8B, 
        DarkGoldenrod        = 0xFFB8860B, 
        DarkGray             = 0xFFA9A9A9, 
        DarkGreen            = 0xFF006400, 
        DarkKhaki            = 0xFFBDB76B, 
        DarkMagenta          = 0xFF8B008B, 
        DarkOliveGreen       = 0xFF556B2F, 
        DarkOrange           = 0xFFFF8C00, 
        DarkOrchid           = 0xFF9932CC, 
        DarkRed              = 0xFF8B0000, 
        DarkSalmon           = 0xFFE9967A, 
        DarkSeaGreen         = 0xFF8FBC8B, 
        DarkSlateBlue        = 0xFF483D8B, 
        DarkSlateGray        = 0xFF2F4F4F, 
        DarkTurquoise        = 0xFF00CED1, 
        DarkViolet           = 0xFF9400D3, 
        DeepPink             = 0xFFFF1493, 
        DeepSkyBlue          = 0xFF00BFFF, 
        DimGray              = 0xFF696969, 
        DodgerBlue           = 0xFF1E90FF, 
        Firebrick            = 0xFFB22222, 
        FloralWhite          = 0xFFFFFAF0, 
        ForestGreen          = 0xFF228B22, 
        Fuchsia              = 0xFFFF00FF, 
        Gainsboro            = 0xFFDCDCDC, 
        GhostWhite           = 0xFFF8F8FF, 
        Gold                 = 0xFFFFD700, 
        Goldenrod            = 0xFFDAA520, 
        Gray                 = 0xFF808080, 
        Green                = 0xFF008000, 
        GreenYellow          = 0xFFADFF2F, 
        Honeydew             = 0xFFF0FFF0, 
        HotPink              = 0xFFFF69B4, 
        IndianRed            = 0xFFCD5C5C, 
        Indigo               = 0xFF4B0082, 
        Ivory                = 0xFFFFFFF0, 
        Khaki                = 0xFFF0E68C, 
        Lavender             = 0xFFE6E6FA, 
        LavenderBlush        = 0xFFFFF0F5, 
        LawnGreen            = 0xFF7CFC00, 
        LemonChiffon         = 0xFFFFFACD, 
        LightBlue            = 0xFFADD8E6, 
        LightCoral           = 0xFFF08080, 
        LightCyan            = 0xFFE0FFFF, 
        LightGoldenrodYellow = 0xFFFAFAD2, 
        LightGray            = 0xFFD3D3D3, 
        LightGreen           = 0xFF90EE90, 
        LightPink            = 0xFFFFB6C1, 
        LightSalmon          = 0xFFFFA07A, 
        LightSeaGreen        = 0xFF20B2AA, 
        LightSkyBlue         = 0xFF87CEFA, 
        LightSlateGray       = 0xFF778899, 
        LightSteelBlue       = 0xFFB0C4DE, 
        LightYellow          = 0xFFFFFFE0, 
        Lime                 = 0xFF00FF00, 
        LimeGreen            = 0xFF32CD32, 
        Linen                = 0xFFFAF0E6, 
        Magenta              = 0xFFFF00FF, 
        Maroon               = 0xFF800000, 
        MediumAquamarine     = 0xFF66CDAA, 
        MediumBlue           = 0xFF0000CD, 
        MediumOrchid         = 0xFFBA55D3, 
        MediumPurple         = 0xFF9370DB, 
        MediumSeaGreen       = 0xFF3CB371, 
        MediumSlateBlue      = 0xFF7B68EE, 
        MediumSpringGreen    = 0xFF00FA9A, 
        MediumTurquoise      = 0xFF48D1CC, 
        MediumVioletRed      = 0xFFC71585, 
        MidnightBlue         = 0xFF191970, 
        MintCream            = 0xFFF5FFFA, 
        MistyRose            = 0xFFFFE4E1, 
        Moccasin             = 0xFFFFE4B5, 
        NavajoWhite          = 0xFFFFDEAD, 
        Navy                 = 0xFF000080, 
        OldLace              = 0xFFFDF5E6, 
        Olive                = 0xFF808000, 
        OliveDrab            = 0xFF6B8E23, 
        Orange               = 0xFFFFA500, 
        OrangeRed            = 0xFFFF4500, 
        Orchid               = 0xFFDA70D6, 
        PaleGoldenrod        = 0xFFEEE8AA, 
        PaleGreen            = 0xFF98FB98, 
        PaleTurquoise        = 0xFFAFEEEE, 
        PaleVioletRed        = 0xFFDB7093, 
        PapayaWhip           = 0xFFFFEFD5, 
        PeachPuff            = 0xFFFFDAB9, 
        Peru                 = 0xFFCD853F, 
        Pink                 = 0xFFFFC0CB, 
        Plum                 = 0xFFDDA0DD, 
        PowderBlue           = 0xFFB0E0E6, 
        Purple               = 0xFF800080, 
        Red                  = 0xFFFF0000, 
        RosyBrown            = 0xFFBC8F8F, 
        RoyalBlue            = 0xFF4169E1, 
        SaddleBrown          = 0xFF8B4513, 
        Salmon               = 0xFFFA8072, 
        SandyBrown           = 0xFFF4A460, 
        SeaGreen             = 0xFF2E8B57, 
        SeaShell             = 0xFFFFF5EE, 
        Sienna               = 0xFFA0522D, 
        Silver               = 0xFFC0C0C0, 
        SkyBlue              = 0xFF87CEEB, 
        SlateBlue            = 0xFF6A5ACD, 
        SlateGray            = 0xFF708090, 
        Snow                 = 0xFFFFFAFA, 
        SpringGreen          = 0xFF00FF7F, 
        SteelBlue            = 0xFF4682B4, 
        Tan                  = 0xFFD2B48C, 
        Teal                 = 0xFF008080, 
        Thistle              = 0xFFD8BFD8, 
        Tomato               = 0xFFFF6347, 
        Transparent          = 0x00FFFFFF, 
        Turquoise            = 0xFF40E0D0, 
        Violet               = 0xFFEE82EE, 
        Wheat                = 0xFFF5DEB3, 
        White                = 0xFFFFFFFF, 
        WhiteSmoke           = 0xFFF5F5F5, 
        Yellow               = 0xFFFFFF00, 
        YellowGreen          = 0xFF9ACD32 
    }; 
 
    // 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