blob: f9dc5991d4822fe0d1ba5afe15b8a601c06666ae [file] [log] [blame]
/**************************************************************************\
*
* 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