mirror of https://github.com/UMSKT/xpmgr.git
189 lines
5.9 KiB
C++
189 lines
5.9 KiB
C++
/**************************************************************************\
|
|
*
|
|
* Copyright (c) 1998-2001, Microsoft Corp. All Rights Reserved.
|
|
*
|
|
* Module Name:
|
|
*
|
|
* Gdiplus Pixel Formats
|
|
*
|
|
* Abstract:
|
|
*
|
|
* GDI+ Pixel Formats
|
|
*
|
|
\**************************************************************************/
|
|
|
|
#ifndef _GDIPLUSPIXELFORMATS_H
|
|
#define _GDIPLUSPIXELFORMATS_H
|
|
|
|
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
|
|
|
|
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 // Pre-multiplied alpha
|
|
#define PixelFormatExtended 0x00100000 // Extended color 16 bits/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 PixelFormat32bppCMYK (15 | (32 << 8))
|
|
#define PixelFormatMax 16
|
|
|
|
inline UINT
|
|
GetPixelFormatSize(PixelFormat pixfmt)
|
|
{
|
|
return (pixfmt >> 8) & 0xff;
|
|
}
|
|
|
|
inline BOOL
|
|
IsIndexedPixelFormat(PixelFormat pixfmt)
|
|
{
|
|
return (pixfmt & PixelFormatIndexed) != 0;
|
|
}
|
|
|
|
inline BOOL
|
|
IsAlphaPixelFormat(PixelFormat pixfmt)
|
|
{
|
|
return (pixfmt & PixelFormatAlpha) != 0;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
#if (GDIPVER >= 0x0110)
|
|
//----------------------------------------------------------------------------
|
|
// Color format conversion parameters
|
|
//----------------------------------------------------------------------------
|
|
|
|
enum PaletteType
|
|
{
|
|
// Arbitrary custom palette provided by caller.
|
|
|
|
PaletteTypeCustom = 0,
|
|
|
|
// Optimal palette generated using a median-cut algorithm.
|
|
|
|
PaletteTypeOptimal = 1,
|
|
|
|
// Black and white palette.
|
|
|
|
PaletteTypeFixedBW = 2,
|
|
|
|
// Symmetric halftone palettes.
|
|
// Each of these halftone palettes will be a superset of the system palette.
|
|
// E.g. Halftone8 will have it's 8-color on-off primaries and the 16 system
|
|
// colors added. With duplicates removed, that leaves 16 colors.
|
|
|
|
PaletteTypeFixedHalftone8 = 3, // 8-color, on-off primaries
|
|
PaletteTypeFixedHalftone27 = 4, // 3 intensity levels of each color
|
|
PaletteTypeFixedHalftone64 = 5, // 4 intensity levels of each color
|
|
PaletteTypeFixedHalftone125 = 6, // 5 intensity levels of each color
|
|
PaletteTypeFixedHalftone216 = 7, // 6 intensity levels of each color
|
|
|
|
// Assymetric halftone palettes.
|
|
// These are somewhat less useful than the symmetric ones, but are
|
|
// included for completeness. These do not include all of the system
|
|
// colors.
|
|
|
|
PaletteTypeFixedHalftone252 = 8, // 6-red, 7-green, 6-blue intensities
|
|
PaletteTypeFixedHalftone256 = 9, // 8-red, 8-green, 4-blue intensities
|
|
};
|
|
|
|
enum DitherType
|
|
{
|
|
DitherTypeNone = 0,
|
|
|
|
// Solid color - picks the nearest matching color with no attempt to
|
|
// halftone or dither. May be used on an arbitrary palette.
|
|
|
|
DitherTypeSolid = 1,
|
|
|
|
// Ordered dithers and spiral dithers must be used with a fixed palette.
|
|
|
|
// NOTE: DitherOrdered4x4 is unique in that it may apply to 16bpp
|
|
// conversions also.
|
|
|
|
DitherTypeOrdered4x4 = 2,
|
|
|
|
DitherTypeOrdered8x8 = 3,
|
|
DitherTypeOrdered16x16 = 4,
|
|
DitherTypeSpiral4x4 = 5,
|
|
DitherTypeSpiral8x8 = 6,
|
|
DitherTypeDualSpiral4x4 = 7,
|
|
DitherTypeDualSpiral8x8 = 8,
|
|
|
|
// Error diffusion. May be used with any palette.
|
|
|
|
DitherTypeErrorDiffusion = 9,
|
|
|
|
DitherTypeMax = 10
|
|
};
|
|
#endif //(GDIPVER >= 0x0110)
|
|
|
|
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
|
|
|