1 /**************************************************************************\
2 *
3 * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved.
4 *
5 * Module Name:
6 *
7 * Gdiplus pixel formats
8 *
9 * Abstract:
10 *
11 * Definitions for color types, palettes, pixel format IDs.
12 *
13 \**************************************************************************/
14
15 #ifndef _GDIPLUSPIXELFORMATS_H
16 #define _GDIPLUSPIXELFORMATS_H
17
18 /*
19 * 32-bit and 64-bit ARGB pixel value
20 */
21
22 typedef DWORD ARGB;
23 typedef DWORDLONG ARGB64;
24
25 #define ALPHA_SHIFT 24
26 #define RED_SHIFT 16
27 #define GREEN_SHIFT 8
28 #define BLUE_SHIFT 0
29 #define ALPHA_MASK ((ARGB) 0xff << ALPHA_SHIFT)
30
31 /*
32 * In-memory pixel data formats:
33 * bits 0-7 = format index
34 * bits 8-15 = pixel size (in bits)
35 * bits 16-23 = flags
36 * bits 24-31 = reserved
37 */
38
39 #ifndef DCR_USE_NEW_105760
40
41 enum PixelFormat
42 {
43 PixelFormatIndexed = 0x00010000, // Indexes into a palette
44 PixelFormatGDI = 0x00020000, // Is a GDI-supported format
45 PixelFormatAlpha = 0x00040000, // Has an alpha component
46 PixelFormatPAlpha = 0x00080000, // Uses pre-multiplied alpha
47 PixelFormatExtended = 0x00100000, // Uses extended color (16 bits per channel)
48 PixelFormatCanonical = 0x00200000, // ?
49
50 PixelFormatUndefined = 0,
51 PixelFormatDontCare = 0,
52
53 PixelFormat1bppIndexed = 1 | ( 1 << 8) | PixelFormatIndexed
54 | PixelFormatGDI,
55 PixelFormat4bppIndexed = 2 | ( 4 << 8) | PixelFormatIndexed
56 | PixelFormatGDI,
57 PixelFormat8bppIndexed = 3 | ( 8 << 8) | PixelFormatIndexed
58 | PixelFormatGDI,
59 PixelFormat16bppGrayScale = 4 | (16 << 8) | PixelFormatExtended,
60 PixelFormat16bppRGB555 = 5 | (16 << 8) | PixelFormatGDI,
61 PixelFormat16bppRGB565 = 6 | (16 << 8) | PixelFormatGDI,
62 PixelFormat16bppARGB1555 = 7 | (16 << 8) | PixelFormatAlpha
63 | PixelFormatGDI,
64 PixelFormat24bppRGB = 8 | (24 << 8) | PixelFormatGDI,
65 PixelFormat32bppRGB = 9 | (32 << 8) | PixelFormatGDI,
66 PixelFormat32bppARGB = 10 | (32 << 8) | PixelFormatAlpha
67 | PixelFormatGDI
68 | PixelFormatCanonical,
69 PixelFormat32bppPARGB = 11 | (32 << 8) | PixelFormatAlpha
70 | PixelFormatPAlpha
71 | PixelFormatGDI,
72 PixelFormat48bppRGB = 12 | (48 << 8) | PixelFormatExtended,
73 PixelFormat64bppARGB = 13 | (64 << 8) | PixelFormatAlpha
74 | PixelFormatCanonical
75 | PixelFormatExtended,
76 PixelFormat64bppPARGB = 14 | (64 << 8) | PixelFormatAlpha
77 | PixelFormatPAlpha
78 | PixelFormatExtended,
79 PixelFormat24bppBGR = 15 | (24 << 8) | PixelFormatGDI,
80 PixelFormatMax = 16
81 };
82
83 #else
84
85 typedef INT PixelFormat;
86
87 #define PixelFormatIndexed 0x00010000 // Indexes into a palette
88 #define PixelFormatGDI 0x00020000 // Is a GDI-supported format
89 #define PixelFormatAlpha 0x00040000 // Has an alpha component
90 #define PixelFormatPAlpha 0x00080000 // Uses pre-multiplied alpha
91 #define PixelFormatExtended 0x00100000 // Uses extended color (16 bits per channel)
92 #define PixelFormatCanonical 0x00200000 // ?
93
94 #define PixelFormatUndefined 0
95 #define PixelFormatDontCare 0
96
97 #define PixelFormat1bppIndexed (1 | ( 1 << 8) | PixelFormatIndexed | PixelFormatGDI)
98 #define PixelFormat4bppIndexed (2 | ( 4 << 8) | PixelFormatIndexed | PixelFormatGDI)
99 #define PixelFormat8bppIndexed (3 | ( 8 << 8) | PixelFormatIndexed | PixelFormatGDI)
100 #define PixelFormat16bppGrayScale (4 | (16 << 8) | PixelFormatExtended)
101 #define PixelFormat16bppRGB555 (5 | (16 << 8) | PixelFormatGDI)
102 #define PixelFormat16bppRGB565 (6 | (16 << 8) | PixelFormatGDI)
103 #define PixelFormat16bppARGB1555 (7 | (16 << 8) | PixelFormatAlpha | PixelFormatGDI)
104 #define PixelFormat24bppRGB (8 | (24 << 8) | PixelFormatGDI)
105 #define PixelFormat32bppRGB (9 | (32 << 8) | PixelFormatGDI)
106 #define PixelFormat32bppARGB (10 | (32 << 8) | PixelFormatAlpha | PixelFormatGDI | PixelFormatCanonical)
107 #define PixelFormat32bppPARGB (11 | (32 << 8) | PixelFormatAlpha | PixelFormatPAlpha | PixelFormatGDI)
108 #define PixelFormat48bppRGB (12 | (48 << 8) | PixelFormatExtended)
109 #define PixelFormat64bppARGB (13 | (64 << 8) | PixelFormatAlpha | PixelFormatCanonical | PixelFormatExtended)
110 #define PixelFormat64bppPARGB (14 | (64 << 8) | PixelFormatAlpha | PixelFormatPAlpha | PixelFormatExtended)
111 #define PixelFormatMax 15
112
113 #endif
114
115
116 /*
117 * Return the pixel size for the specified format (in bits)
118 */
119
120 inline UINT
GetPixelFormatSize(PixelFormat pixfmt)121 GetPixelFormatSize(
122 PixelFormat pixfmt
123 )
124 {
125 return (pixfmt >> 8) & 0xff;
126 }
127
128 /*
129 * Determine if the specified pixel format is an indexed color format
130 */
131
132 inline BOOL
IsIndexedPixelFormat(PixelFormat pixfmt)133 IsIndexedPixelFormat(
134 PixelFormat pixfmt
135 )
136 {
137 return (pixfmt & PixelFormatIndexed) != 0;
138 }
139
140 /*
141 * Determine if the pixel format can have alpha channel
142 */
143
144 inline BOOL
IsAlphaPixelFormat(PixelFormat pixfmt)145 IsAlphaPixelFormat(
146 PixelFormat pixfmt
147 )
148 {
149 return (pixfmt & PixelFormatAlpha) != 0;
150 }
151
152 /*
153 * Determine if the pixel format is an extended format,
154 * i.e. supports 16-bit per channel
155 */
156
157 inline BOOL
IsExtendedPixelFormat(PixelFormat pixfmt)158 IsExtendedPixelFormat(
159 PixelFormat pixfmt
160 )
161 {
162 return (pixfmt & PixelFormatExtended) != 0;
163 }
164
165 /*
166 * Determine if the pixel format is canonical format:
167 * PixelFormat32bppARGB
168 * PixelFormat32bppPARGB
169 * PixelFormat64bppARGB
170 * PixelFormat64bppPARGB
171 */
172
173 inline BOOL
IsCanonicalPixelFormat(PixelFormat pixfmt)174 IsCanonicalPixelFormat(
175 PixelFormat pixfmt
176 )
177 {
178 return (pixfmt & PixelFormatCanonical) != 0;
179 }
180
181 /*
182 * Color palette
183 * palette entries are limited to 32bpp ARGB pixel format
184 */
185
186 enum PaletteFlags
187 {
188 PaletteFlagsHasAlpha = 0x0001,
189 PaletteFlagsGrayScale = 0x0002,
190 PaletteFlagsHalftone = 0x0004
191 };
192
193 struct ColorPalette
194 {
195 public:
196 UINT Flags; // palette flags
197 UINT Count; // number of color entries
198 ARGB Entries[1]; // palette color entries
199 };
200
201 #endif
202