/**************************************************************************\ | |
* | |
* Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. | |
* | |
* Module Name: | |
* | |
* Gdiplus pixel formats | |
* | |
* Abstract: | |
* | |
* Definitions for color types, palettes, pixel format IDs. | |
* | |
\**************************************************************************/ | |
#ifndef _GDIPLUSPIXELFORMATS_H | |
#define _GDIPLUSPIXELFORMATS_H | |
/* | |
* 32-bit and 64-bit ARGB pixel value | |
*/ | |
typedef DWORD ARGB; | |
typedef DWORDLONG ARGB64; | |
#define ALPHA_SHIFT 24 | |
#define RED_SHIFT 16 | |
#define GREEN_SHIFT 8 | |
#define BLUE_SHIFT 0 | |
#define ALPHA_MASK ((ARGB) 0xff << ALPHA_SHIFT) | |
/* | |
* In-memory pixel data formats: | |
* bits 0-7 = format index | |
* bits 8-15 = pixel size (in bits) | |
* bits 16-23 = flags | |
* bits 24-31 = reserved | |
*/ | |
#ifndef DCR_USE_NEW_105760 | |
enum PixelFormat | |
{ | |
PixelFormatIndexed = 0x00010000, // Indexes into a palette | |
PixelFormatGDI = 0x00020000, // Is a GDI-supported format | |
PixelFormatAlpha = 0x00040000, // Has an alpha component | |
PixelFormatPAlpha = 0x00080000, // Uses pre-multiplied alpha | |
PixelFormatExtended = 0x00100000, // Uses extended color (16 bits per channel) | |
PixelFormatCanonical = 0x00200000, // ? | |
PixelFormatUndefined = 0, | |
PixelFormatDontCare = 0, | |
PixelFormat1bppIndexed = 1 | ( 1 << 8) | PixelFormatIndexed | |
| PixelFormatGDI, | |
PixelFormat4bppIndexed = 2 | ( 4 << 8) | PixelFormatIndexed | |
| PixelFormatGDI, | |
PixelFormat8bppIndexed = 3 | ( 8 << 8) | PixelFormatIndexed | |
| PixelFormatGDI, | |
PixelFormat16bppGrayScale = 4 | (16 << 8) | PixelFormatExtended, | |
PixelFormat16bppRGB555 = 5 | (16 << 8) | PixelFormatGDI, | |
PixelFormat16bppRGB565 = 6 | (16 << 8) | PixelFormatGDI, | |
PixelFormat16bppARGB1555 = 7 | (16 << 8) | PixelFormatAlpha | |
| PixelFormatGDI, | |
PixelFormat24bppRGB = 8 | (24 << 8) | PixelFormatGDI, | |
PixelFormat32bppRGB = 9 | (32 << 8) | PixelFormatGDI, | |
PixelFormat32bppARGB = 10 | (32 << 8) | PixelFormatAlpha | |
| PixelFormatGDI | |
| PixelFormatCanonical, | |
PixelFormat32bppPARGB = 11 | (32 << 8) | PixelFormatAlpha | |
| PixelFormatPAlpha | |
| PixelFormatGDI, | |
PixelFormat48bppRGB = 12 | (48 << 8) | PixelFormatExtended, | |
PixelFormat64bppARGB = 13 | (64 << 8) | PixelFormatAlpha | |
| PixelFormatCanonical | |
| PixelFormatExtended, | |
PixelFormat64bppPARGB = 14 | (64 << 8) | PixelFormatAlpha | |
| PixelFormatPAlpha | |
| PixelFormatExtended, | |
PixelFormat24bppBGR = 15 | (24 << 8) | PixelFormatGDI, | |
PixelFormatMax = 16 | |
}; | |
#else | |
typedef INT PixelFormat; | |
#define PixelFormatIndexed 0x00010000 // Indexes into a palette | |
#define PixelFormatGDI 0x00020000 // Is a GDI-supported format | |
#define PixelFormatAlpha 0x00040000 // Has an alpha component | |
#define PixelFormatPAlpha 0x00080000 // Uses pre-multiplied alpha | |
#define PixelFormatExtended 0x00100000 // Uses extended color (16 bits per channel) | |
#define PixelFormatCanonical 0x00200000 // ? | |
#define PixelFormatUndefined 0 | |
#define PixelFormatDontCare 0 | |
#define PixelFormat1bppIndexed (1 | ( 1 << 8) | PixelFormatIndexed | PixelFormatGDI) | |
#define PixelFormat4bppIndexed (2 | ( 4 << 8) | PixelFormatIndexed | PixelFormatGDI) | |
#define PixelFormat8bppIndexed (3 | ( 8 << 8) | PixelFormatIndexed | PixelFormatGDI) | |
#define PixelFormat16bppGrayScale (4 | (16 << 8) | PixelFormatExtended) | |
#define PixelFormat16bppRGB555 (5 | (16 << 8) | PixelFormatGDI) | |
#define PixelFormat16bppRGB565 (6 | (16 << 8) | PixelFormatGDI) | |
#define PixelFormat16bppARGB1555 (7 | (16 << 8) | PixelFormatAlpha | PixelFormatGDI) | |
#define PixelFormat24bppRGB (8 | (24 << 8) | PixelFormatGDI) | |
#define PixelFormat32bppRGB (9 | (32 << 8) | PixelFormatGDI) | |
#define PixelFormat32bppARGB (10 | (32 << 8) | PixelFormatAlpha | PixelFormatGDI | PixelFormatCanonical) | |
#define PixelFormat32bppPARGB (11 | (32 << 8) | PixelFormatAlpha | PixelFormatPAlpha | PixelFormatGDI) | |
#define PixelFormat48bppRGB (12 | (48 << 8) | PixelFormatExtended) | |
#define PixelFormat64bppARGB (13 | (64 << 8) | PixelFormatAlpha | PixelFormatCanonical | PixelFormatExtended) | |
#define PixelFormat64bppPARGB (14 | (64 << 8) | PixelFormatAlpha | PixelFormatPAlpha | PixelFormatExtended) | |
#define PixelFormatMax 15 | |
#endif | |
/* | |
* Return the pixel size for the specified format (in bits) | |
*/ | |
inline UINT | |
GetPixelFormatSize( | |
PixelFormat pixfmt | |
) | |
{ | |
return (pixfmt >> 8) & 0xff; | |
} | |
/* | |
* Determine if the specified pixel format is an indexed color format | |
*/ | |
inline BOOL | |
IsIndexedPixelFormat( | |
PixelFormat pixfmt | |
) | |
{ | |
return (pixfmt & PixelFormatIndexed) != 0; | |
} | |
/* | |
* Determine if the pixel format can have alpha channel | |
*/ | |
inline BOOL | |
IsAlphaPixelFormat( | |
PixelFormat pixfmt | |
) | |
{ | |
return (pixfmt & PixelFormatAlpha) != 0; | |
} | |
/* | |
* Determine if the pixel format is an extended format, | |
* i.e. supports 16-bit per channel | |
*/ | |
inline BOOL | |
IsExtendedPixelFormat( | |
PixelFormat pixfmt | |
) | |
{ | |
return (pixfmt & PixelFormatExtended) != 0; | |
} | |
/* | |
* Determine if the pixel format is canonical format: | |
* PixelFormat32bppARGB | |
* PixelFormat32bppPARGB | |
* PixelFormat64bppARGB | |
* PixelFormat64bppPARGB | |
*/ | |
inline BOOL | |
IsCanonicalPixelFormat( | |
PixelFormat pixfmt | |
) | |
{ | |
return (pixfmt & PixelFormatCanonical) != 0; | |
} | |
/* | |
* Color palette | |
* palette entries are limited to 32bpp ARGB pixel format | |
*/ | |
enum PaletteFlags | |
{ | |
PaletteFlagsHasAlpha = 0x0001, | |
PaletteFlagsGrayScale = 0x0002, | |
PaletteFlagsHalftone = 0x0004 | |
}; | |
struct ColorPalette | |
{ | |
public: | |
UINT Flags; // palette flags | |
UINT Count; // number of color entries | |
ARGB Entries[1]; // palette color entries | |
}; | |
#endif |