2
$Id: palette.inc,v 1.4 2002/09/07 15:07:47 peter Exp $
4
This file is part of the Free Pascal run time library.
5
Copyright (c) 1999-2000 by the Free Pascal development team
7
This include implements the different palette manipulation
10
See the file COPYING.FPC, included in this distribution,
11
for details about the copyright.
13
This program is distributed in the hope that it will be useful,
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
17
**********************************************************************}
20
{ This is the standard VGA palette for the first 256 colors }
21
{ at 6 bpp for each RG and B component. }
22
DefaultColors: Array[0..255] of RGBRec = (
23
(Red: 0;Green: 0;Blue: 0),
24
(Red: 0;Green: 0;Blue: 168),
25
(Red: 0;Green: 168;Blue: 0),
26
(Red: 0;Green: 168;Blue: 168),
27
(Red: 168;Green: 0;Blue: 0),
28
(Red: 168;Green: 0;Blue: 168),
29
(Red: 168;Green: 84;Blue: 0),
30
(Red: 168;Green: 168;Blue: 168),
31
(Red: 84;Green: 84;Blue: 84),
32
(Red: 84;Green: 84;Blue: 252),
33
(Red: 84;Green: 252;Blue: 84),
34
(Red: 84;Green: 252;Blue: 252),
35
(Red: 252;Green: 84;Blue: 84),
36
(Red: 252;Green: 84;Blue: 252),
37
(Red: 252;Green: 252;Blue: 84),
38
(Red: 252;Green: 252;Blue: 252),
39
(Red: 0;Green: 0;Blue: 0),
40
(Red: 20;Green: 20;Blue: 20),
41
(Red: 32;Green: 32;Blue: 32),
42
(Red: 44;Green: 44;Blue: 44),
43
(Red: 56;Green: 56;Blue: 56),
44
(Red: 68;Green: 68;Blue: 68),
45
(Red: 80;Green: 80;Blue: 80),
46
(Red: 96;Green: 96;Blue: 96),
47
(Red: 112;Green: 112;Blue: 112),
48
(Red: 128;Green: 128;Blue: 128),
49
(Red: 144;Green: 144;Blue: 144),
50
(Red: 160;Green: 160;Blue: 160),
51
(Red: 180;Green: 180;Blue: 180),
52
(Red: 200;Green: 200;Blue: 200),
53
(Red: 224;Green: 224;Blue: 224),
54
(Red: 252;Green: 252;Blue: 252),
55
(Red: 0;Green: 0;Blue: 252),
56
(Red: 64;Green: 0;Blue: 252),
57
(Red: 124;Green: 0;Blue: 252),
58
(Red: 188;Green: 0;Blue: 252),
59
(Red: 252;Green: 0;Blue: 252),
60
(Red: 252;Green: 0;Blue: 188),
61
(Red: 252;Green: 0;Blue: 124),
62
(Red: 252;Green: 0;Blue: 64),
63
(Red: 252;Green: 0;Blue: 0),
64
(Red: 252;Green: 64;Blue: 0),
65
(Red: 252;Green: 124;Blue: 0),
66
(Red: 252;Green: 188;Blue: 0),
67
(Red: 252;Green: 252;Blue: 0),
68
(Red: 188;Green: 252;Blue: 0),
69
(Red: 124;Green: 252;Blue: 0),
70
(Red: 64;Green: 252;Blue: 0),
71
(Red: 0;Green: 252;Blue: 0),
72
(Red: 0;Green: 252;Blue: 64),
73
(Red: 0;Green: 252;Blue: 124),
74
(Red: 0;Green: 252;Blue: 188),
75
(Red: 0;Green: 252;Blue: 252),
76
(Red: 0;Green: 188;Blue: 252),
77
(Red: 0;Green: 124;Blue: 252),
78
(Red: 0;Green: 64;Blue: 252),
79
(Red: 124;Green: 124;Blue: 252),
80
(Red: 156;Green: 124;Blue: 252),
81
(Red: 188;Green: 124;Blue: 252),
82
(Red: 220;Green: 124;Blue: 252),
83
(Red: 252;Green: 124;Blue: 252),
84
(Red: 252;Green: 124;Blue: 220),
85
(Red: 252;Green: 124;Blue: 188),
86
(Red: 252;Green: 124;Blue: 156),
87
(Red: 252;Green: 124;Blue: 124),
88
(Red: 252;Green: 156;Blue: 124),
89
(Red: 252;Green: 188;Blue: 124),
90
(Red: 252;Green: 220;Blue: 124),
91
(Red: 252;Green: 252;Blue: 124),
92
(Red: 220;Green: 252;Blue: 124),
93
(Red: 188;Green: 252;Blue: 124),
94
(Red: 156;Green: 252;Blue: 124),
95
(Red: 124;Green: 252;Blue: 124),
96
(Red: 124;Green: 252;Blue: 156),
97
(Red: 124;Green: 252;Blue: 188),
98
(Red: 124;Green: 252;Blue: 220),
99
(Red: 124;Green: 252;Blue: 252),
100
(Red: 124;Green: 220;Blue: 252),
101
(Red: 124;Green: 188;Blue: 252),
102
(Red: 124;Green: 156;Blue: 252),
103
(Red: 180;Green: 180;Blue: 252),
104
(Red: 196;Green: 180;Blue: 252),
105
(Red: 216;Green: 180;Blue: 252),
106
(Red: 232;Green: 180;Blue: 252),
107
(Red: 252;Green: 180;Blue: 252),
108
(Red: 252;Green: 180;Blue: 232),
109
(Red: 252;Green: 180;Blue: 216),
110
(Red: 252;Green: 180;Blue: 196),
111
(Red: 252;Green: 180;Blue: 180),
112
(Red: 252;Green: 196;Blue: 180),
113
(Red: 252;Green: 216;Blue: 180),
114
(Red: 252;Green: 232;Blue: 180),
115
(Red: 252;Green: 252;Blue: 180),
116
(Red: 232;Green: 252;Blue: 180),
117
(Red: 216;Green: 252;Blue: 180),
118
(Red: 196;Green: 252;Blue: 180),
119
(Red: 180;Green: 252;Blue: 180),
120
(Red: 180;Green: 252;Blue: 196),
121
(Red: 180;Green: 252;Blue: 216),
122
(Red: 180;Green: 252;Blue: 232),
123
(Red: 180;Green: 252;Blue: 252),
124
(Red: 180;Green: 232;Blue: 252),
125
(Red: 180;Green: 216;Blue: 252),
126
(Red: 180;Green: 196;Blue: 252),
127
(Red: 0;Green: 0;Blue: 112),
128
(Red: 28;Green: 0;Blue: 112),
129
(Red: 56;Green: 0;Blue: 112),
130
(Red: 84;Green: 0;Blue: 112),
131
(Red: 112;Green: 0;Blue: 112),
132
(Red: 112;Green: 0;Blue: 84),
133
(Red: 112;Green: 0;Blue: 56),
134
(Red: 112;Green: 0;Blue: 28),
135
(Red: 112;Green: 0;Blue: 0),
136
(Red: 112;Green: 28;Blue: 0),
137
(Red: 112;Green: 56;Blue: 0),
138
(Red: 112;Green: 84;Blue: 0),
139
(Red: 112;Green: 112;Blue: 0),
140
(Red: 84;Green: 112;Blue: 0),
141
(Red: 56;Green: 112;Blue: 0),
142
(Red: 28;Green: 112;Blue: 0),
143
(Red: 0;Green: 112;Blue: 0),
144
(Red: 0;Green: 112;Blue: 28),
145
(Red: 0;Green: 112;Blue: 56),
146
(Red: 0;Green: 112;Blue: 84),
147
(Red: 0;Green: 112;Blue: 112),
148
(Red: 0;Green: 84;Blue: 112),
149
(Red: 0;Green: 56;Blue: 112),
150
(Red: 0;Green: 28;Blue: 112),
151
(Red: 56;Green: 56;Blue: 112),
152
(Red: 68;Green: 56;Blue: 112),
153
(Red: 84;Green: 56;Blue: 112),
154
(Red: 96;Green: 56;Blue: 112),
155
(Red: 112;Green: 56;Blue: 112),
156
(Red: 112;Green: 56;Blue: 96),
157
(Red: 112;Green: 56;Blue: 84),
158
(Red: 112;Green: 56;Blue: 68),
159
(Red: 112;Green: 56;Blue: 56),
160
(Red: 112;Green: 68;Blue: 56),
161
(Red: 112;Green: 84;Blue: 56),
162
(Red: 112;Green: 96;Blue: 56),
163
(Red: 112;Green: 112;Blue: 56),
164
(Red: 96;Green: 112;Blue: 56),
165
(Red: 84;Green: 112;Blue: 56),
166
(Red: 68;Green: 112;Blue: 56),
167
(Red: 56;Green: 112;Blue: 56),
168
(Red: 56;Green: 112;Blue: 68),
169
(Red: 56;Green: 112;Blue: 84),
170
(Red: 56;Green: 112;Blue: 96),
171
(Red: 56;Green: 112;Blue: 112),
172
(Red: 56;Green: 96;Blue: 112),
173
(Red: 56;Green: 84;Blue: 112),
174
(Red: 56;Green: 68;Blue: 112),
175
(Red: 80;Green: 80;Blue: 112),
176
(Red: 88;Green: 80;Blue: 112),
177
(Red: 96;Green: 80;Blue: 112),
178
(Red: 104;Green: 80;Blue: 112),
179
(Red: 112;Green: 80;Blue: 112),
180
(Red: 112;Green: 80;Blue: 104),
181
(Red: 112;Green: 80;Blue: 96),
182
(Red: 112;Green: 80;Blue: 88),
183
(Red: 112;Green: 80;Blue: 80),
184
(Red: 112;Green: 88;Blue: 80),
185
(Red: 112;Green: 96;Blue: 80),
186
(Red: 112;Green: 104;Blue: 80),
187
(Red: 112;Green: 112;Blue: 80),
188
(Red: 104;Green: 112;Blue: 80),
189
(Red: 96;Green: 112;Blue: 80),
190
(Red: 88;Green: 112;Blue: 80),
191
(Red: 80;Green: 112;Blue: 80),
192
(Red: 80;Green: 112;Blue: 88),
193
(Red: 80;Green: 112;Blue: 96),
194
(Red: 80;Green: 112;Blue: 104),
195
(Red: 80;Green: 112;Blue: 112),
196
(Red: 80;Green: 104;Blue: 112),
197
(Red: 80;Green: 96;Blue: 112),
198
(Red: 80;Green: 88;Blue: 112),
199
(Red: 0;Green: 0;Blue: 64),
200
(Red: 16;Green: 0;Blue: 64),
201
(Red: 32;Green: 0;Blue: 64),
202
(Red: 48;Green: 0;Blue: 64),
203
(Red: 64;Green: 0;Blue: 64),
204
(Red: 64;Green: 0;Blue: 48),
205
(Red: 64;Green: 0;Blue: 32),
206
(Red: 64;Green: 0;Blue: 16),
207
(Red: 64;Green: 0;Blue: 0),
208
(Red: 64;Green: 16;Blue: 0),
209
(Red: 64;Green: 32;Blue: 0),
210
(Red: 64;Green: 48;Blue: 0),
211
(Red: 64;Green: 64;Blue: 0),
212
(Red: 48;Green: 64;Blue: 0),
213
(Red: 32;Green: 64;Blue: 0),
214
(Red: 16;Green: 64;Blue: 0),
215
(Red: 0;Green: 64;Blue: 0),
216
(Red: 0;Green: 64;Blue: 16),
217
(Red: 0;Green: 64;Blue: 32),
218
(Red: 0;Green: 64;Blue: 48),
219
(Red: 0;Green: 64;Blue: 64),
220
(Red: 0;Green: 48;Blue: 64),
221
(Red: 0;Green: 32;Blue: 64),
222
(Red: 0;Green: 16;Blue: 64),
223
(Red: 32;Green: 32;Blue: 64),
224
(Red: 40;Green: 32;Blue: 64),
225
(Red: 48;Green: 32;Blue: 64),
226
(Red: 56;Green: 32;Blue: 64),
227
(Red: 64;Green: 32;Blue: 64),
228
(Red: 64;Green: 32;Blue: 56),
229
(Red: 64;Green: 32;Blue: 48),
230
(Red: 64;Green: 32;Blue: 40),
231
(Red: 64;Green: 32;Blue: 32),
232
(Red: 64;Green: 40;Blue: 32),
233
(Red: 64;Green: 48;Blue: 32),
234
(Red: 64;Green: 56;Blue: 32),
235
(Red: 64;Green: 64;Blue: 32),
236
(Red: 56;Green: 64;Blue: 32),
237
(Red: 48;Green: 64;Blue: 32),
238
(Red: 40;Green: 64;Blue: 32),
239
(Red: 32;Green: 64;Blue: 32),
240
(Red: 32;Green: 64;Blue: 40),
241
(Red: 32;Green: 64;Blue: 48),
242
(Red: 32;Green: 64;Blue: 56),
243
(Red: 32;Green: 64;Blue: 64),
244
(Red: 32;Green: 56;Blue: 64),
245
(Red: 32;Green: 48;Blue: 64),
246
(Red: 32;Green: 40;Blue: 64),
247
(Red: 44;Green: 44;Blue: 64),
248
(Red: 48;Green: 44;Blue: 64),
249
(Red: 52;Green: 44;Blue: 64),
250
(Red: 60;Green: 44;Blue: 64),
251
(Red: 64;Green: 44;Blue: 64),
252
(Red: 64;Green: 44;Blue: 60),
253
(Red: 64;Green: 44;Blue: 52),
254
(Red: 64;Green: 44;Blue: 48),
255
(Red: 64;Green: 44;Blue: 44),
256
(Red: 64;Green: 48;Blue: 44),
257
(Red: 64;Green: 52;Blue: 44),
258
(Red: 64;Green: 60;Blue: 44),
259
(Red: 64;Green: 64;Blue: 44),
260
(Red: 60;Green: 64;Blue: 44),
261
(Red: 52;Green: 64;Blue: 44),
262
(Red: 48;Green: 64;Blue: 44),
263
(Red: 44;Green: 64;Blue: 44),
264
(Red: 44;Green: 64;Blue: 48),
265
(Red: 44;Green: 64;Blue: 52),
266
(Red: 44;Green: 64;Blue: 60),
267
(Red: 44;Green: 64;Blue: 64),
268
(Red: 44;Green: 60;Blue: 64),
269
(Red: 44;Green: 52;Blue: 64),
270
(Red: 44;Green: 48;Blue: 64),
271
(Red: 0;Green: 0;Blue: 0),
272
(Red: 0;Green: 0;Blue: 0),
273
(Red: 0;Green: 0;Blue: 0),
274
(Red: 0;Green: 0;Blue: 0),
275
(Red: 0;Green: 0;Blue: 0),
276
(Red: 0;Green: 0;Blue: 0),
277
(Red: 0;Green: 0;Blue: 0),
278
(Red: 0;Green: 0;Blue: 0));
280
procedure SetAllPaletteDefault(const Palette:PaletteType);
285
{ palette routines do not work in DirectColor mode }
288
_GraphResult := grError;
291
Size:=Palette.Size; { number of entries...}
292
{ first determine if we are not trying to }
293
{ change too much colors... }
294
if Palette.Size > PaletteSize then
296
_GraphResult := grError;
299
Dec(Size); { Color arrays are indexed according to zero }
302
{ skip if RGB values are -1 , as stated in the TP manual }
303
if (Palette.Colors[i].Red <> -1) and (Palette.Colors[i].Green <> -1)
304
and (Palette.Colors[i].Blue <> -1) then
306
Palette.Colors[i].Red,
307
Palette.Colors[i].Green,
308
Palette.Colors[i].Blue);
312
{********************************************************}
313
{ Procedure SetPalette() }
314
{--------------------------------------------------------}
315
{ This routine changes the colorNum to the default }
316
{ palette entry specified in the second parameter. }
317
{ For example, SetPalette(0, Lightcyan) makes the }
318
{ 0th palette entry to the default Light Cyan Color . }
319
{********************************************************}
320
Procedure SetPalette(ColorNum: word; Color: shortint);
322
{ palette routines do not work in DirectColor mode }
325
_GraphResult := grError;
328
{ Check if we can actually change that palette color }
329
if ColorNum > PaletteSize then
331
_GraphResult := grError;
335
{ Check if the max. default color is reached...}
336
{ no, this disables palette setting for 256 color modes! (JM) }
337
{ if Color > EGAWhite then
339
_GraphResult := grError;
342
SetRGBPalette(ColorNum,
343
DefaultColors[Color].Red,
344
DefaultColors[Color].Green,
345
DefaultColors[Color].Blue);
349
procedure GetPalette(var Palette: PaletteType);
354
{ palette routines do not work in DirectColor mode }
357
_GraphResult := grError;
360
Palette.Size := PaletteSize;
362
size := PaletteSize - 1;
365
Palette.Colors[i].Red,
366
Palette.Colors[i].Green,
367
Palette.Colors[i].Blue);
370
function GetPaletteSize: smallint;
372
GetPaletteSize := PaletteSize;
375
procedure GetDefaultPalette(var Palette: PaletteType);
377
move(DefaultColors, Palette.Colors, sizeof(DefaultColors));
378
{ The default palette always has 256 entries, but in reality }
379
{ it depends on the number of colors possible. }
380
Palette.Size := PaletteSize;
381
if PaletteSize > 256 then Palette.Size := 256;
385
$Log: palette.inc,v $
386
Revision 1.4 2002/09/07 15:07:47 peter
387
* old logs removed and tabs fixed