/**************************************************************************\ * * 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