You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
214 lines
4.3 KiB
214 lines
4.3 KiB
/**************************************************************************\
|
|
*
|
|
* 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
|
|
|