windows-nt/Source/XPSP1/NT/multimedia/media/avi/drawdib/dith666.h
2020-09-26 16:20:57 +08:00

609 lines
13 KiB
C

//////////////////////////////////////////////////////////////////////////////
//
// DITH666.H - full color dither (to a palette with 6 red, 6 green 6 blue
// levels)
//
//////////////////////////////////////////////////////////////////////////////
#define HSIZE 4 // matrix size is 4x4
#define SEG666 _based(_segname("DITH666")) // segment containing tables
#define SEGXXX _based(_segname("_CODE")) // segment containing init tables
//////////////////////////////////////////////////////////////////////////////
//
// dither table for 256 level dither (RGB 24 or 32)
//
// total table size is 12k
//
//////////////////////////////////////////////////////////////////////////////
#define DITH256(x,y,r,g,b) aTranslate666[ \
1 * (r/51 + (r%51 > aHalftone4x4[x][y])) + \
6 * (g/51 + (g%51 > aHalftone4x4[x][y])) + \
36 * (b/51 + (b%51 > aHalftone4x4[x][y]))]
#define DITH8(x,y,r,g,b) aTranslate666[ \
aHalftone8[0][(x)&3][(y)&3][(r)] +\
aHalftone8[1][(x)&3][(y)&3][(g)] +\
aHalftone8[2][(x)&3][(y)&3][(b)] ]
char unsigned SEG666 aHalftone8[3][4][4][256] = {(BYTE)-1};
#if 1
static char unsigned const SEGXXX aHalftone4x4[4][4] =
{
0, 25, 6, 31,
38, 12, 44, 19,
9, 35, 3, 28,
47, 22, 41, 15
};
#else
static char unsigned const SEGXXX aHalftone4x4[4][4] =
{
41, 3, 9, 28,
35, 15, 22, 47,
6, 25, 38, 0,
19, 44, 31, 12
};
#endif
//////////////////////////////////////////////////////////////////////////////
//
// dither table for 32 level dither (RGB 555 or 565)
//
// total table size is 12k
//
//////////////////////////////////////////////////////////////////////////////
#define d62(n) (((n) * 10) / 62) // n / 6.2
#define m62(n) ((n) * 1000 / 62 - d62(n) * 100) // n % 6.2
#define DITH31(x,y,r,g,b) aTranslate666[ \
1 * (d62(r) + (m62(r) > (UINT)aHalftone2x2[x][y])) + \
6 * (d62(g) + (m62(g) > (UINT)aHalftone2x2[x][y])) + \
36 * (d62(b) + (m62(b) > (UINT)aHalftone2x2[x][y]))]
static char SEGXXX aHalftone2x2[2][2] =
{
0, 99,
66,33,
};
#ifdef USE_C
#define DITH5(x,y,rgb) aTranslate666[ \
aHalftone5[0][(x)&3][(y)&3][((rgb)>>8)&0xFF] +\
aHalftone5[1][(x)&3][(y)&3][((rgb)>>5)&0xFF] +\
aHalftone5[2][(x)&3][(y)&3][((rgb)>>0)&0xFF] ]
char unsigned SEG666 aHalftone5[3][4][4][256] = {(BYTE)-1};
#if 0
static char unsigned const SEGXXX aHalftone4x4_5[4][4] =
{
0,3,0,3,
4,1,4,1,
0,3,0,3,
4,1,4,1
};
#else
static char SEGXXX aHalftone4x4_5[4][4] =
{
0,3,2,3,
2,4,0,3,
2,0,4,1,
4,1,2,1
};
#endif
#endif
//////////////////////////////////////////////////////////////////////////////
//
// translate table from a 666 index to a foreground palette index
//
//////////////////////////////////////////////////////////////////////////////
char unsigned SEG666 aTranslate666[216] =
{
0,
29,
30,
31,
32,
249,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
250,
250,
57,
58,
59,
251,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
250,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
227,
112,
113,
114,
115,
116,
117,
118,
119,
151,
120,
121,
122,
123,
124,
228,
125,
126,
229,
133,
162,
135,
131,
132,
137,
166,
134,
140,
130,
136,
143,
138,
139,
174,
141,
142,
177,
129,
144,
145,
146,
147,
148,
149,
150,
157,
152,
153,
154,
155,
156,
192,
158,
159,
160,
161,
196,
163,
164,
165,
127,
199,
167,
168,
169,
170,
171,
172,
173,
207,
175,
176,
210,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
224,
193,
194,
195,
252,
252,
197,
198,
128,
253,
252,
200,
201,
202,
203,
204,
205,
206,
230,
208,
209,
231,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
254,
223,
232,
225,
226,
255,
};
/*-----------------------------------------------------------------------
| mspal.h
|
| Standard MS Apps Palette. v 1.01
|
| #include this file in the same file as HPalCreateAppPalette
|
| WARNING: Generated File! DO NOT EDIT!
| WARNING: Palette MUST be created with HpalCreateAppPalette
|
---------------------------------------------------------------WESC----*/
unsigned char SEGXXX pal666[256][3] =
{
// R G B
{0x00, 0x00, 0x00}, // 0 Sys Black gray 0
{0x80, 0x00, 0x00}, // 1 Sys Dk Red
{0x00, 0x80, 0x00}, // 2 Sys Dk Green
{0x80, 0x80, 0x00}, // 3 Sys Dk Yellow
{0x00, 0x00, 0x80}, // 4 Sys Dk Blue
{0x80, 0x00, 0x80}, // 5 Sys Dk Violet
{0x00, 0x80, 0x80}, // 6 Sys Dk Cyan
{0xc0, 0xc0, 0xc0}, // 7 Sys Lt Grey gray 192
{0xc0, 0xdc, 0xc0}, // 8 Sys 8
{0xa6, 0xca, 0xf0}, // 9 Sys 9 (the first 10 are fixed by Windows)
{0x04, 0x04, 0x04}, // 10 gray 4
{0x08, 0x08, 0x08}, // 11 gray 8
{0x0c, 0x0c, 0x0c}, // 12 gray 12
{0x11, 0x11, 0x11}, // 13 gray 17
{0x16, 0x16, 0x16}, // 14 gray 22
{0x1c, 0x1c, 0x1c}, // 15 gray 28
{0x22, 0x22, 0x22}, // 16 gray 34
{0x29, 0x29, 0x29}, // 17 gray 41
{0x55, 0x55, 0x55}, // 18 swapped so inversions look good gray 85
{0x4d, 0x4d, 0x4d}, // 19 swapped so inversions look good gray 77
{0x42, 0x42, 0x42}, // 20 swapped so inversions look good gray 66
{0x39, 0x39, 0x39}, // 21 swapped so inversions look good gray 57
{0x81, 0x81, 0x81}, // 22 Sys Dk Grey repeat gray 128
{0x81, 0x00, 0x00}, // 23 Sys Dk Red repeat
{0x00, 0x81, 0x00}, // 24 Sys Dk Green repeat
{0x81, 0x81, 0x00}, // 25 Sys Dk Yellow repeat
{0x00, 0x00, 0x81}, // 26 Sys Dk Blue repeat
{0x81, 0x00, 0x81}, // 27 Sys Dk Violet repeat
{0x00, 0x81, 0x81}, // 28 Sys Dk Cyan repeat
{0x33, 0x00, 0x00}, // 29
{0x66, 0x00, 0x00}, // 30
{0x99, 0x00, 0x00}, // 31
{0xcc, 0x00, 0x00}, // 32
{0x00, 0x33, 0x00}, // 33
{0x33, 0x33, 0x00}, // 34
{0x66, 0x33, 0x00}, // 35
{0x99, 0x33, 0x00}, // 36
{0xcc, 0x33, 0x00}, // 37
{0xff, 0x33, 0x00}, // 38
{0x00, 0x66, 0x00}, // 39
{0x33, 0x66, 0x00}, // 40
{0x66, 0x66, 0x00}, // 41
{0x99, 0x66, 0x00}, // 42
{0xcc, 0x66, 0x00}, // 43
{0xff, 0x66, 0x00}, // 44
{0x00, 0x99, 0x00}, // 45
{0x33, 0x99, 0x00}, // 46
{0x66, 0x99, 0x00}, // 47
{0x99, 0x99, 0x00}, // 48
{0xcc, 0x99, 0x00}, // 49
{0xff, 0x99, 0x00}, // 50
{0x00, 0xcc, 0x00}, // 51
{0x33, 0xcc, 0x00}, // 52
{0x66, 0xcc, 0x00}, // 53
{0x99, 0xcc, 0x00}, // 54
{0xcc, 0xcc, 0x00}, // 55
{0xff, 0xcc, 0x00}, // 56
{0x66, 0xff, 0x00}, // 57
{0x99, 0xff, 0x00}, // 58
{0xcc, 0xff, 0x00}, // 59
{0x00, 0x00, 0x33}, // 60
{0x33, 0x00, 0x33}, // 61
{0x66, 0x00, 0x33}, // 62
{0x99, 0x00, 0x33}, // 63
{0xcc, 0x00, 0x33}, // 64
{0xff, 0x00, 0x33}, // 65
{0x00, 0x33, 0x33}, // 66
{0x33, 0x33, 0x33}, // 67 gray 51
{0x66, 0x33, 0x33}, // 68
{0x99, 0x33, 0x33}, // 69
{0xcc, 0x33, 0x33}, // 70
{0xff, 0x33, 0x33}, // 71
{0x00, 0x66, 0x33}, // 72
{0x33, 0x66, 0x33}, // 73
{0x66, 0x66, 0x33}, // 74
{0x99, 0x66, 0x33}, // 75
{0xcc, 0x66, 0x33}, // 76
{0xff, 0x66, 0x33}, // 77
{0x00, 0x99, 0x33}, // 78
{0x33, 0x99, 0x33}, // 79
{0x66, 0x99, 0x33}, // 80
{0x99, 0x99, 0x33}, // 81
{0xcc, 0x99, 0x33}, // 82
{0xff, 0x99, 0x33}, // 83
{0x00, 0xcc, 0x33}, // 84
{0x33, 0xcc, 0x33}, // 85
{0x66, 0xcc, 0x33}, // 86
{0x99, 0xcc, 0x33}, // 87
{0xcc, 0xcc, 0x33}, // 88
{0xff, 0xcc, 0x33}, // 89
{0x33, 0xff, 0x33}, // 90
{0x66, 0xff, 0x33}, // 91
{0x99, 0xff, 0x33}, // 92
{0xcc, 0xff, 0x33}, // 93
{0xff, 0xff, 0x33}, // 94
{0x00, 0x00, 0x66}, // 95
{0x33, 0x00, 0x66}, // 96
{0x66, 0x00, 0x66}, // 97
{0x99, 0x00, 0x66}, // 98
{0xcc, 0x00, 0x66}, // 99
{0xff, 0x00, 0x66}, // 100
{0x00, 0x33, 0x66}, // 101
{0x33, 0x33, 0x66}, // 102
{0x66, 0x33, 0x66}, // 103
{0x99, 0x33, 0x66}, // 104
{0xcc, 0x33, 0x66}, // 105
{0xff, 0x33, 0x66}, // 106
{0x00, 0x66, 0x66}, // 107
{0x33, 0x66, 0x66}, // 108
{0x66, 0x66, 0x66}, // 109 gray 102
{0x99, 0x66, 0x66}, // 110
{0xcc, 0x66, 0x66}, // 111
{0x00, 0x99, 0x66}, // 112
{0x33, 0x99, 0x66}, // 113
{0x66, 0x99, 0x66}, // 114
{0x99, 0x99, 0x66}, // 115
{0xcc, 0x99, 0x66}, // 116
{0xff, 0x99, 0x66}, // 117
{0x00, 0xcc, 0x66}, // 118
{0x33, 0xcc, 0x66}, // 119
{0x99, 0xcc, 0x66}, // 120
{0xcc, 0xcc, 0x66}, // 121
{0xff, 0xcc, 0x66}, // 122
{0x00, 0xff, 0x66}, // 123
{0x33, 0xff, 0x66}, // 124
{0x99, 0xff, 0x66}, // 125
{0xcc, 0xff, 0x66}, // 126
{0xff, 0x00, 0xcc}, // 127
{0xcc, 0x00, 0xff}, // 128
{0x00, 0x99, 0x99}, // 129
{0x99, 0x33, 0x99}, // 130
{0x99, 0x00, 0x99}, // 131
{0xcc, 0x00, 0x99}, // 132
{0x00, 0x00, 0x99}, // 133
{0x33, 0x33, 0x99}, // 134
{0x66, 0x00, 0x99}, // 135
{0xcc, 0x33, 0x99}, // 136
{0xff, 0x00, 0x99}, // 137
{0x00, 0x66, 0x99}, // 138
{0x33, 0x66, 0x99}, // 139
{0x66, 0x33, 0x99}, // 140
{0x99, 0x66, 0x99}, // 141
{0xcc, 0x66, 0x99}, // 142
{0xff, 0x33, 0x99}, // 143
{0x33, 0x99, 0x99}, // 144
{0x66, 0x99, 0x99}, // 145
{0x99, 0x99, 0x99}, // 146 gray 153
{0xcc, 0x99, 0x99}, // 147
{0xff, 0x99, 0x99}, // 148
{0x00, 0xcc, 0x99}, // 149
{0x33, 0xcc, 0x99}, // 150
{0x66, 0xcc, 0x66}, // 151
{0x99, 0xcc, 0x99}, // 152
{0xcc, 0xcc, 0x99}, // 153
{0xff, 0xcc, 0x99}, // 154
{0x00, 0xff, 0x99}, // 155
{0x33, 0xff, 0x99}, // 156
{0x66, 0xcc, 0x99}, // 157
{0x99, 0xff, 0x99}, // 158
{0xcc, 0xff, 0x99}, // 159
{0xff, 0xff, 0x99}, // 160
{0x00, 0x00, 0xcc}, // 161
{0x33, 0x00, 0x99}, // 162
{0x66, 0x00, 0xcc}, // 163
{0x99, 0x00, 0xcc}, // 164
{0xcc, 0x00, 0xcc}, // 165
{0x00, 0x33, 0x99}, // 166
{0x33, 0x33, 0xcc}, // 167
{0x66, 0x33, 0xcc}, // 168
{0x99, 0x33, 0xcc}, // 169
{0xcc, 0x33, 0xcc}, // 170
{0xff, 0x33, 0xcc}, // 171
{0x00, 0x66, 0xcc}, // 172
{0x33, 0x66, 0xcc}, // 173
{0x66, 0x66, 0x99}, // 174
{0x99, 0x66, 0xcc}, // 175
{0xcc, 0x66, 0xcc}, // 176
{0xff, 0x66, 0x99}, // 177
{0x00, 0x99, 0xcc}, // 178
{0x33, 0x99, 0xcc}, // 179
{0x66, 0x99, 0xcc}, // 180
{0x99, 0x99, 0xcc}, // 181
{0xcc, 0x99, 0xcc}, // 182
{0xff, 0x99, 0xcc}, // 183
{0x00, 0xcc, 0xcc}, // 184
{0x33, 0xcc, 0xcc}, // 185
{0x66, 0xcc, 0xcc}, // 186
{0x99, 0xcc, 0xcc}, // 187
{0xcc, 0xcc, 0xcc}, // 188 gray 204
{0xff, 0xcc, 0xcc}, // 189
{0x00, 0xff, 0xcc}, // 190
{0x33, 0xff, 0xcc}, // 191
{0x66, 0xff, 0x99}, // 192
{0x99, 0xff, 0xcc}, // 193
{0xcc, 0xff, 0xcc}, // 194
{0xff, 0xff, 0xcc}, // 195
{0x33, 0x00, 0xcc}, // 196
{0x66, 0x00, 0xff}, // 197
{0x99, 0x00, 0xff}, // 198
{0x00, 0x33, 0xcc}, // 199
{0x33, 0x33, 0xff}, // 200
{0x66, 0x33, 0xff}, // 201
{0x99, 0x33, 0xff}, // 202
{0xcc, 0x33, 0xff}, // 203
{0xff, 0x33, 0xff}, // 204
{0x00, 0x66, 0xff}, // 205
{0x33, 0x66, 0xff}, // 206
{0x66, 0x66, 0xcc}, // 207
{0x99, 0x66, 0xff}, // 208
{0xcc, 0x66, 0xff}, // 209
{0xff, 0x66, 0xcc}, // 210
{0x00, 0x99, 0xff}, // 211
{0x33, 0x99, 0xff}, // 212
{0x66, 0x99, 0xff}, // 213
{0x99, 0x99, 0xff}, // 214
{0xcc, 0x99, 0xff}, // 215
{0xff, 0x99, 0xff}, // 216
{0x00, 0xcc, 0xff}, // 217
{0x33, 0xcc, 0xff}, // 218
{0x66, 0xcc, 0xff}, // 219
{0x99, 0xcc, 0xff}, // 220
{0xcc, 0xcc, 0xff}, // 221
{0xff, 0xcc, 0xff}, // 222
{0x33, 0xff, 0xff}, // 223
{0x66, 0xff, 0xcc}, // 224
{0x99, 0xff, 0xff}, // 225
{0xcc, 0xff, 0xff}, // 226
{0xff, 0x66, 0x66}, // 227
{0x66, 0xff, 0x66}, // 228
{0xff, 0xff, 0x66}, // 229
{0x66, 0x66, 0xff}, // 230
{0xff, 0x66, 0xff}, // 231
{0x66, 0xff, 0xff}, // 232
{0xc1, 0xc1, 0xc1}, // 233 Sys Dk Grey repeat inversion gray 192
{0x5f, 0x5f, 0x5f}, // 234 gray 95
{0x77, 0x77, 0x77}, // 235 gray 119
{0x86, 0x86, 0x86}, // 236 gray 134
{0x96, 0x96, 0x96}, // 237 gray 150
{0xcb, 0xcb, 0xcb}, // 238 gray 203
{0xb2, 0xb2, 0xb2}, // 239 gray 178
{0xd7, 0xd7, 0xd7}, // 240 gray 215
{0xdd, 0xdd, 0xdd}, // 241 gray 221
{0xe3, 0xe3, 0xe3}, // 242 gray 227
{0xea, 0xea, 0xea}, // 243 gray 234
{0xf1, 0xf1, 0xf1}, // 244 gray 241
{0xf8, 0xf8, 0xf8}, // 245 gray 248
{0xff, 0xfb, 0xf0}, // 246 Sys Reserved
{0xa0, 0xa0, 0xa4}, // 247 Sys Reserved
{0x80, 0x80, 0x80}, // 248 Sys Lt Gray gray 128
{0xff, 0x00, 0x00}, // 249 Sys Red
{0x00, 0xff, 0x00}, // 250 Sys Green
{0xff, 0xff, 0x00}, // 251 Sys Yellow
{0x00, 0x00, 0xff}, // 252 Sys Blue
{0xff, 0x00, 0xff}, // 253 Sys Violet
{0x00, 0xff, 0xff}, // 254 Sys Cyan
{0xff, 0xff, 0xff} // 255 Sys White gray 255
};