1 //------------------------------------------------------------------------
2 //  HQ2X : High-Quality 2x Graphics Resizing
3 //------------------------------------------------------------------------
4 //
5 //  Copyright (c) 2007  The EDGE Team.
6 //
7 //  This program is free software; you can redistribute it and/or
8 //  modify it under the terms of the GNU General Public License
9 //  as published by the Free Software Foundation; either version 2
10 //  of the License, or (at your option) any later version.
11 //
12 //  This program is distributed in the hope that it will be useful,
13 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
14 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 //  GNU General Public License for more details.
16 //
17 //------------------------------------------------------------------------
18 //
19 //  Based heavily on the code (C) 2003 Maxim Stepin, which is
20 //  under the GNU LGPL (Lesser General Public License).
21 //
22 //  For more information, see: http://hiend3d.com/hq2x.html
23 //
24 //------------------------------------------------------------------------
25 //
26 //  -AJA- Modified to use a palettised input image, allowing the
27 //        YUV table to be used with full precision (because the
28 //        intermediate conversion to 16-bit RGB isn't needed).
29 //
30 //        Changed the YUV calculation to something more standard.
31 //        The LerpColor method and support for transparent pixels
32 //        was copied from the Doomsday engine by Jaakko Ker�nen.
33 //
34 
35 #include "epi.h"
36 #include "image_hq2x.h"
37 
38 namespace epi
39 {
40 namespace Hq2x
41 {
42 
43 u32_t PixelRGB[256];
44 u32_t PixelYUV[256];
45 
46 const u32_t Amask = 0xFF000000;
47 const u32_t Ymask = 0x00FF0000;
48 const u32_t Umask = 0x0000FF00;
49 const u32_t Vmask = 0x000000FF;
50 
51 const u32_t trY   = 0x00300000;
52 const u32_t trU   = 0x00000700;
53 const u32_t trV   = 0x00000007;  // -AJA- changed (was 6)
54 
GET_R(u32_t col)55 inline u32_t GET_R(u32_t col) { return (col >> 16) & 0xFF; }
GET_G(u32_t col)56 inline u32_t GET_G(u32_t col) { return (col >>  8) & 0xFF; }
GET_B(u32_t col)57 inline u32_t GET_B(u32_t col) { return (col      ) & 0xFF; }
GET_A(u32_t col)58 inline u32_t GET_A(u32_t col) { return (col >> 24) & 0xFF; }
59 
LerpColor(u8_t * dest,u32_t c1,u32_t c2,u32_t c3,u32_t f1,u32_t f2,u32_t f3,u32_t shift)60 inline void LerpColor(u8_t * dest, u32_t c1, u32_t c2, u32_t c3,
61 					   u32_t f1, u32_t f2, u32_t f3, u32_t shift)
62 {
63 	dest[0] = (GET_R(c1) * f1 + GET_R(c2) * f2 + GET_R(c3) * f3) >> shift;
64 	dest[1] = (GET_G(c1) * f1 + GET_G(c2) * f2 + GET_G(c3) * f3) >> shift;
65 	dest[2] = (GET_B(c1) * f1 + GET_B(c2) * f2 + GET_B(c3) * f3) >> shift;
66 	dest[3] = (GET_A(c1) * f1 + GET_A(c2) * f2 + GET_A(c3) * f3) >> shift;
67 }
68 
Interp0(u8_t * dest,u32_t c1)69 void Interp0(u8_t * dest, u32_t c1)
70 {
71 	// *dest = c1
72 	dest[0] = GET_R(c1);
73 	dest[1] = GET_G(c1);
74 	dest[2] = GET_B(c1);
75 	dest[3] = GET_A(c1);
76 }
77 
Interp1(u8_t * dest,u32_t c1,u32_t c2)78 void Interp1(u8_t * dest, u32_t c1, u32_t c2)
79 {
80 	// *dest = (c1*3+c2) >> 2;
81 	LerpColor(dest, c1, c2, 0, 3,1,0, 2);
82 }
83 
Interp2(u8_t * dest,u32_t c1,u32_t c2,u32_t c3)84 void Interp2(u8_t * dest, u32_t c1, u32_t c2, u32_t c3)
85 {
86 	// *dest = (c1*2+c2+c3) >> 2;
87 	LerpColor(dest, c1, c2, c3, 2,1,1, 2);
88 }
89 
Interp5(u8_t * dest,u32_t c1,u32_t c2)90 void Interp5(u8_t * dest, u32_t c1, u32_t c2)
91 {
92 	// *dest = (c1+c2) >> 1;
93 	LerpColor(dest, c1, c2, 0, 1,1,0, 1);
94 }
95 
Interp6(u8_t * dest,u32_t c1,u32_t c2,u32_t c3)96 void Interp6(u8_t * dest, u32_t c1, u32_t c2, u32_t c3)
97 {
98   // *dest = (c1*5+c2*2+c3)/8;
99   LerpColor(dest, c1, c2, c3, 5,2,1, 3);
100 }
101 
Interp7(u8_t * dest,u32_t c1,u32_t c2,u32_t c3)102 void Interp7(u8_t * dest, u32_t c1, u32_t c2, u32_t c3)
103 {
104   // *dest = (c1*6+c2+c3)/8;
105   LerpColor(dest, c1, c2, c3, 6,1,1, 3);
106 }
107 
Interp9(u8_t * dest,u32_t c1,u32_t c2,u32_t c3)108 void Interp9(u8_t * dest, u32_t c1, u32_t c2, u32_t c3)
109 {
110   // *dest = (c1*2+(c2+c3)*3)/8;
111   LerpColor(dest, c1, c2, c3, 2,3,3, 3);
112 }
113 
Interp10(u8_t * dest,u32_t c1,u32_t c2,u32_t c3)114 void Interp10(u8_t * dest, u32_t c1, u32_t c2, u32_t c3)
115 {
116   // *dest = (c1*14+c2+c3)/16;
117   LerpColor(dest, c1, c2, c3, 14,1,1, 4);
118 }
119 
120 #define PIXEL00_0     Interp0(dest, c[5]);
121 #define PIXEL00_10    Interp1(dest, c[5], c[1]);
122 #define PIXEL00_11    Interp1(dest, c[5], c[4]);
123 #define PIXEL00_12    Interp1(dest, c[5], c[2]);
124 #define PIXEL00_20    Interp2(dest, c[5], c[4], c[2]);
125 #define PIXEL00_21    Interp2(dest, c[5], c[1], c[2]);
126 #define PIXEL00_22    Interp2(dest, c[5], c[1], c[4]);
127 #define PIXEL00_60    Interp6(dest, c[5], c[2], c[4]);
128 #define PIXEL00_61    Interp6(dest, c[5], c[4], c[2]);
129 #define PIXEL00_70    Interp7(dest, c[5], c[4], c[2]);
130 #define PIXEL00_90    Interp9(dest, c[5], c[4], c[2]);
131 #define PIXEL00_100   Interp10(dest, c[5], c[4], c[2]);
132 
133 #define PIXEL01_0     Interp0(dest+4, c[5]);
134 #define PIXEL01_10    Interp1(dest+4, c[5], c[3]);
135 #define PIXEL01_11    Interp1(dest+4, c[5], c[2]);
136 #define PIXEL01_12    Interp1(dest+4, c[5], c[6]);
137 #define PIXEL01_20    Interp2(dest+4, c[5], c[2], c[6]);
138 #define PIXEL01_21    Interp2(dest+4, c[5], c[3], c[6]);
139 #define PIXEL01_22    Interp2(dest+4, c[5], c[3], c[2]);
140 #define PIXEL01_60    Interp6(dest+4, c[5], c[6], c[2]);
141 #define PIXEL01_61    Interp6(dest+4, c[5], c[2], c[6]);
142 #define PIXEL01_70    Interp7(dest+4, c[5], c[2], c[6]);
143 #define PIXEL01_90    Interp9(dest+4, c[5], c[2], c[6]);
144 #define PIXEL01_100   Interp10(dest+4, c[5], c[2], c[6]);
145 
146 #define PIXEL10_0     Interp0(dest+BpL, c[5]);
147 #define PIXEL10_10    Interp1(dest+BpL, c[5], c[7]);
148 #define PIXEL10_11    Interp1(dest+BpL, c[5], c[8]);
149 #define PIXEL10_12    Interp1(dest+BpL, c[5], c[4]);
150 #define PIXEL10_20    Interp2(dest+BpL, c[5], c[8], c[4]);
151 #define PIXEL10_21    Interp2(dest+BpL, c[5], c[7], c[4]);
152 #define PIXEL10_22    Interp2(dest+BpL, c[5], c[7], c[8]);
153 #define PIXEL10_60    Interp6(dest+BpL, c[5], c[4], c[8]);
154 #define PIXEL10_61    Interp6(dest+BpL, c[5], c[8], c[4]);
155 #define PIXEL10_70    Interp7(dest+BpL, c[5], c[8], c[4]);
156 #define PIXEL10_90    Interp9(dest+BpL, c[5], c[8], c[4]);
157 #define PIXEL10_100   Interp10(dest+BpL, c[5], c[8], c[4]);
158 
159 #define PIXEL11_0     Interp0(dest+BpL+4, c[5]);
160 #define PIXEL11_10    Interp1(dest+BpL+4, c[5], c[9]);
161 #define PIXEL11_11    Interp1(dest+BpL+4, c[5], c[6]);
162 #define PIXEL11_12    Interp1(dest+BpL+4, c[5], c[8]);
163 #define PIXEL11_20    Interp2(dest+BpL+4, c[5], c[6], c[8]);
164 #define PIXEL11_21    Interp2(dest+BpL+4, c[5], c[9], c[8]);
165 #define PIXEL11_22    Interp2(dest+BpL+4, c[5], c[9], c[6]);
166 #define PIXEL11_60    Interp6(dest+BpL+4, c[5], c[8], c[6]);
167 #define PIXEL11_61    Interp6(dest+BpL+4, c[5], c[6], c[8]);
168 #define PIXEL11_70    Interp7(dest+BpL+4, c[5], c[6], c[8]);
169 #define PIXEL11_90    Interp9(dest+BpL+4, c[5], c[6], c[8]);
170 #define PIXEL11_100   Interp10(dest+BpL+4, c[5], c[6], c[8]);
171 
UDiff(u32_t u1,u32_t u2)172 static inline u32_t UDiff(u32_t u1, u32_t u2)
173 {
174 	return (u1 >= u2) ? u1 - u2 : u2 - u1;
175 }
176 
Diff(const u8_t p1,const u8_t p2)177 inline bool Diff(const u8_t p1, const u8_t p2)
178 {
179 	u32_t YUV1 = PixelYUV[p1];
180 	u32_t YUV2 = PixelYUV[p2];
181 
182 	return (YUV1 & Amask) != (YUV2 & Amask) ||
183 		   UDiff((YUV1 & Ymask), (YUV2 & Ymask)) > trY ||
184 		   UDiff((YUV1 & Umask), (YUV2 & Umask)) > trU ||
185 		   UDiff((YUV1 & Vmask), (YUV2 & Vmask)) > trV;
186 }
187 
Setup(const u8_t * palette,int trans_pixel)188 void Setup(const u8_t *palette, int trans_pixel)
189 {
190 	for (int c = 0; c < 256; c++)
191 	{
192 		int r = palette[c*3 + 0];
193 		int g = palette[c*3 + 1];
194 		int b = palette[c*3 + 2];
195 		int A = 255;
196 
197 		if (c == trans_pixel)
198 			r = g = b = A = 0;
199 
200 		PixelRGB[c] = ((A << 24) + (r << 16) + (g << 8) + b);
201 
202 		// -AJA- changed to better formulas (based on Wikipedia article)
203 		int Y = (r * 77 + g * 150 + b * 29) >> 8;
204 		int u = 128 + ((-r *  38 - g *  74 + b * 111) >> 9);
205 		int v = 128 + (( r * 157 - g * 132 - b *  26) >> 9);
206 
207 #if 0  // DEBUGGING
208 		fprintf(stderr, "[%d] #%02x%02x%02x -> YUV #%02x%02x%02x\n", c, r,g,b, Y,u,v);
209 #endif
210 		PixelYUV[c] = ((A << 24) + (Y << 16) + (u << 8) + v);
211 	}
212 }
213 
ConvertLine(int y,int w,int h,bool invert,u8_t * dest,const u8_t * src)214 void ConvertLine(int y, int w, int h, bool invert, u8_t *dest, const u8_t *src)
215 {
216 	int prevline = (y > 0)   ? -w : 0;
217 	int nextline = (y < h-1) ?  w : 0;
218 
219 	// Bytes per Line (destination)
220 	int BpL = (w * 8);
221 
222 	if (invert)
223 	{
224 		dest += BpL;
225 		BpL = 0 - BpL;
226 	}
227 
228 	u8_t  p[10];  // palette pixels
229 	u32_t c[10];  // RGBA pixels
230 
231 	//   +----+----+----+
232 	//   |    |    |    |
233 	//   | p1 | p2 | p3 |
234 	//   +----+----+----+
235 	//   |    |    |    |
236 	//   | p4 | p5 | p6 |
237 	//   +----+----+----+
238 	//   |    |    |    |
239 	//   | p7 | p8 | p9 |
240 	//   +----+----+----+
241 
242 	for (int x = 0; x < w; x++, src++, dest += 8 /* RGBA */)
243 	{
244 		p[2] = src[prevline];
245 		p[5] = src[0];
246 		p[8] = src[nextline];
247 
248 		if (x > 0)
249 		{
250 			p[1] = src[prevline-1];
251 			p[4] = src[-1];
252 			p[7] = src[nextline-1];
253 		}
254 		else
255 		{
256 			p[1] = p[2];
257 			p[4] = p[5];
258 			p[7] = p[8];
259 		}
260 
261 		if (x < w-1)
262 		{
263 			p[3] = src[prevline+1];
264 			p[6] = src[1];
265 			p[9] = src[nextline+1];
266 		}
267 		else
268 		{
269 			p[3] = p[2];
270 			p[6] = p[5];
271 			p[9] = p[8];
272 		}
273 
274 		for (int k=1; k <= 9; k++)
275 			c[k] = PixelRGB[p[k]];
276 
277 		u8_t pattern = 0;
278 
279 		if (Diff(p[5], p[1])) pattern |= 0x01;
280 		if (Diff(p[5], p[2])) pattern |= 0x02;
281 		if (Diff(p[5], p[3])) pattern |= 0x04;
282 		if (Diff(p[5], p[4])) pattern |= 0x08;
283 		if (Diff(p[5], p[6])) pattern |= 0x10;
284 		if (Diff(p[5], p[7])) pattern |= 0x20;
285 		if (Diff(p[5], p[8])) pattern |= 0x40;
286 		if (Diff(p[5], p[9])) pattern |= 0x80;
287 
288 		switch (pattern)
289 		{
290 			case 0:
291 			case 1:
292 			case 4:
293 			case 32:
294 			case 128:
295 			case 5:
296 			case 132:
297 			case 160:
298 			case 33:
299 			case 129:
300 			case 36:
301 			case 133:
302 			case 164:
303 			case 161:
304 			case 37:
305 			case 165:
306 				{
307 					PIXEL00_20
308 					PIXEL01_20
309 					PIXEL10_20
310 					PIXEL11_20
311 					break;
312 				}
313 			case 2:
314 			case 34:
315 			case 130:
316 			case 162:
317 				{
318 					PIXEL00_22
319 					PIXEL01_21
320 					PIXEL10_20
321 					PIXEL11_20
322 					break;
323 				}
324 			case 16:
325 			case 17:
326 			case 48:
327 			case 49:
328 				{
329 					PIXEL00_20
330 					PIXEL01_22
331 					PIXEL10_20
332 					PIXEL11_21
333 					break;
334 				}
335 			case 64:
336 			case 65:
337 			case 68:
338 			case 69:
339 				{
340 					PIXEL00_20
341 					PIXEL01_20
342 					PIXEL10_21
343 					PIXEL11_22
344 					break;
345 				}
346 			case 8:
347 			case 12:
348 			case 136:
349 			case 140:
350 				{
351 					PIXEL00_21
352 					PIXEL01_20
353 					PIXEL10_22
354 					PIXEL11_20
355 					break;
356 				}
357 			case 3:
358 			case 35:
359 			case 131:
360 			case 163:
361 				{
362 					PIXEL00_11
363 					PIXEL01_21
364 					PIXEL10_20
365 					PIXEL11_20
366 					break;
367 				}
368 			case 6:
369 			case 38:
370 			case 134:
371 			case 166:
372 				{
373 					PIXEL00_22
374 					PIXEL01_12
375 					PIXEL10_20
376 					PIXEL11_20
377 					break;
378 				}
379 			case 20:
380 			case 21:
381 			case 52:
382 			case 53:
383 				{
384 					PIXEL00_20
385 					PIXEL01_11
386 					PIXEL10_20
387 					PIXEL11_21
388 					break;
389 				}
390 			case 144:
391 			case 145:
392 			case 176:
393 			case 177:
394 				{
395 					PIXEL00_20
396 					PIXEL01_22
397 					PIXEL10_20
398 					PIXEL11_12
399 					break;
400 				}
401 			case 192:
402 			case 193:
403 			case 196:
404 			case 197:
405 				{
406 					PIXEL00_20
407 					PIXEL01_20
408 					PIXEL10_21
409 					PIXEL11_11
410 					break;
411 				}
412 			case 96:
413 			case 97:
414 			case 100:
415 			case 101:
416 				{
417 					PIXEL00_20
418 					PIXEL01_20
419 					PIXEL10_12
420 					PIXEL11_22
421 					break;
422 				}
423 			case 40:
424 			case 44:
425 			case 168:
426 			case 172:
427 				{
428 					PIXEL00_21
429 					PIXEL01_20
430 					PIXEL10_11
431 					PIXEL11_20
432 					break;
433 				}
434 			case 9:
435 			case 13:
436 			case 137:
437 			case 141:
438 				{
439 					PIXEL00_12
440 					PIXEL01_20
441 					PIXEL10_22
442 					PIXEL11_20
443 					break;
444 				}
445 			case 18:
446 			case 50:
447 				{
448 					PIXEL00_22
449 					if (Diff(p[2], p[6]))
450 					{
451 						PIXEL01_10
452 					}
453 					else
454 					{
455 						PIXEL01_20
456 					}
457 					PIXEL10_20
458 					PIXEL11_21
459 					break;
460 				}
461 			case 80:
462 			case 81:
463 				{
464 					PIXEL00_20
465 					PIXEL01_22
466 					PIXEL10_21
467 					if (Diff(p[6], p[8]))
468 					{
469 						PIXEL11_10
470 					}
471 					else
472 					{
473 						PIXEL11_20
474 					}
475 					break;
476 				}
477 			case 72:
478 			case 76:
479 				{
480 					PIXEL00_21
481 					PIXEL01_20
482 					if (Diff(p[8], p[4]))
483 					{
484 						PIXEL10_10
485 					}
486 					else
487 					{
488 						PIXEL10_20
489 					}
490 					PIXEL11_22
491 					break;
492 				}
493 			case 10:
494 			case 138:
495 				{
496 					if (Diff(p[4], p[2]))
497 					{
498 						PIXEL00_10
499 					}
500 					else
501 					{
502 						PIXEL00_20
503 					}
504 					PIXEL01_21
505 					PIXEL10_22
506 					PIXEL11_20
507 					break;
508 				}
509 			case 66:
510 				{
511 					PIXEL00_22
512 					PIXEL01_21
513 					PIXEL10_21
514 					PIXEL11_22
515 					break;
516 				}
517 			case 24:
518 				{
519 					PIXEL00_21
520 					PIXEL01_22
521 					PIXEL10_22
522 					PIXEL11_21
523 					break;
524 				}
525 			case 7:
526 			case 39:
527 			case 135:
528 				{
529 					PIXEL00_11
530 					PIXEL01_12
531 					PIXEL10_20
532 					PIXEL11_20
533 					break;
534 				}
535 			case 148:
536 			case 149:
537 			case 180:
538 				{
539 					PIXEL00_20
540 					PIXEL01_11
541 					PIXEL10_20
542 					PIXEL11_12
543 					break;
544 				}
545 			case 224:
546 			case 228:
547 			case 225:
548 				{
549 					PIXEL00_20
550 					PIXEL01_20
551 					PIXEL10_12
552 					PIXEL11_11
553 					break;
554 				}
555 			case 41:
556 			case 169:
557 			case 45:
558 				{
559 					PIXEL00_12
560 					PIXEL01_20
561 					PIXEL10_11
562 					PIXEL11_20
563 					break;
564 				}
565 			case 22:
566 			case 54:
567 				{
568 					PIXEL00_22
569 					if (Diff(p[2], p[6]))
570 					{
571 						PIXEL01_0
572 					}
573 					else
574 					{
575 						PIXEL01_20
576 					}
577 					PIXEL10_20
578 					PIXEL11_21
579 					break;
580 				}
581 			case 208:
582 			case 209:
583 				{
584 					PIXEL00_20
585 					PIXEL01_22
586 					PIXEL10_21
587 					if (Diff(p[6], p[8]))
588 					{
589 						PIXEL11_0
590 					}
591 					else
592 					{
593 						PIXEL11_20
594 					}
595 					break;
596 				}
597 			case 104:
598 			case 108:
599 				{
600 					PIXEL00_21
601 					PIXEL01_20
602 					if (Diff(p[8], p[4]))
603 					{
604 						PIXEL10_0
605 					}
606 					else
607 					{
608 						PIXEL10_20
609 					}
610 					PIXEL11_22
611 					break;
612 				}
613 			case 11:
614 			case 139:
615 				{
616 					if (Diff(p[4], p[2]))
617 					{
618 						PIXEL00_0
619 					}
620 					else
621 					{
622 						PIXEL00_20
623 					}
624 					PIXEL01_21
625 					PIXEL10_22
626 					PIXEL11_20
627 					break;
628 				}
629 			case 19:
630 			case 51:
631 				{
632 					if (Diff(p[2], p[6]))
633 					{
634 						PIXEL00_11
635 						PIXEL01_10
636 					}
637 					else
638 					{
639 						PIXEL00_60
640 						PIXEL01_90
641 					}
642 					PIXEL10_20
643 					PIXEL11_21
644 					break;
645 				}
646 			case 146:
647 			case 178:
648 				{
649 					PIXEL00_22
650 					if (Diff(p[2], p[6]))
651 					{
652 						PIXEL01_10
653 						PIXEL11_12
654 					}
655 					else
656 					{
657 						PIXEL01_90
658 						PIXEL11_61
659 					}
660 					PIXEL10_20
661 					break;
662 				}
663 			case 84:
664 			case 85:
665 				{
666 					PIXEL00_20
667 					if (Diff(p[6], p[8]))
668 					{
669 						PIXEL01_11
670 						PIXEL11_10
671 					}
672 					else
673 					{
674 						PIXEL01_60
675 						PIXEL11_90
676 					}
677 					PIXEL10_21
678 					break;
679 				}
680 			case 112:
681 			case 113:
682 				{
683 					PIXEL00_20
684 					PIXEL01_22
685 					if (Diff(p[6], p[8]))
686 					{
687 						PIXEL10_12
688 						PIXEL11_10
689 					}
690 					else
691 					{
692 						PIXEL10_61
693 						PIXEL11_90
694 					}
695 					break;
696 				}
697 			case 200:
698 			case 204:
699 				{
700 					PIXEL00_21
701 					PIXEL01_20
702 					if (Diff(p[8], p[4]))
703 					{
704 						PIXEL10_10
705 						PIXEL11_11
706 					}
707 					else
708 					{
709 						PIXEL10_90
710 						PIXEL11_60
711 					}
712 					break;
713 				}
714 			case 73:
715 			case 77:
716 				{
717 					if (Diff(p[8], p[4]))
718 					{
719 						PIXEL00_12
720 						PIXEL10_10
721 					}
722 					else
723 					{
724 						PIXEL00_61
725 						PIXEL10_90
726 					}
727 					PIXEL01_20
728 					PIXEL11_22
729 					break;
730 				}
731 			case 42:
732 			case 170:
733 				{
734 					if (Diff(p[4], p[2]))
735 					{
736 						PIXEL00_10
737 						PIXEL10_11
738 					}
739 					else
740 					{
741 						PIXEL00_90
742 						PIXEL10_60
743 					}
744 					PIXEL01_21
745 					PIXEL11_20
746 					break;
747 				}
748 			case 14:
749 			case 142:
750 				{
751 					if (Diff(p[4], p[2]))
752 					{
753 						PIXEL00_10
754 						PIXEL01_12
755 					}
756 					else
757 					{
758 						PIXEL00_90
759 						PIXEL01_61
760 					}
761 					PIXEL10_22
762 					PIXEL11_20
763 					break;
764 				}
765 			case 67:
766 				{
767 					PIXEL00_11
768 					PIXEL01_21
769 					PIXEL10_21
770 					PIXEL11_22
771 					break;
772 				}
773 			case 70:
774 				{
775 					PIXEL00_22
776 					PIXEL01_12
777 					PIXEL10_21
778 					PIXEL11_22
779 					break;
780 				}
781 			case 28:
782 				{
783 					PIXEL00_21
784 					PIXEL01_11
785 					PIXEL10_22
786 					PIXEL11_21
787 					break;
788 				}
789 			case 152:
790 				{
791 					PIXEL00_21
792 					PIXEL01_22
793 					PIXEL10_22
794 					PIXEL11_12
795 					break;
796 				}
797 			case 194:
798 				{
799 					PIXEL00_22
800 					PIXEL01_21
801 					PIXEL10_21
802 					PIXEL11_11
803 					break;
804 				}
805 			case 98:
806 				{
807 					PIXEL00_22
808 					PIXEL01_21
809 					PIXEL10_12
810 					PIXEL11_22
811 					break;
812 				}
813 			case 56:
814 				{
815 					PIXEL00_21
816 					PIXEL01_22
817 					PIXEL10_11
818 					PIXEL11_21
819 					break;
820 				}
821 			case 25:
822 				{
823 					PIXEL00_12
824 					PIXEL01_22
825 					PIXEL10_22
826 					PIXEL11_21
827 					break;
828 				}
829 			case 26:
830 			case 31:
831 				{
832 					if (Diff(p[4], p[2]))
833 					{
834 						PIXEL00_0
835 					}
836 					else
837 					{
838 						PIXEL00_20
839 					}
840 					if (Diff(p[2], p[6]))
841 					{
842 						PIXEL01_0
843 					}
844 					else
845 					{
846 						PIXEL01_20
847 					}
848 					PIXEL10_22
849 					PIXEL11_21
850 					break;
851 				}
852 			case 82:
853 			case 214:
854 				{
855 					PIXEL00_22
856 					if (Diff(p[2], p[6]))
857 					{
858 						PIXEL01_0
859 					}
860 					else
861 					{
862 						PIXEL01_20
863 					}
864 					PIXEL10_21
865 					if (Diff(p[6], p[8]))
866 					{
867 						PIXEL11_0
868 					}
869 					else
870 					{
871 						PIXEL11_20
872 					}
873 					break;
874 				}
875 			case 88:
876 			case 248:
877 				{
878 					PIXEL00_21
879 					PIXEL01_22
880 					if (Diff(p[8], p[4]))
881 					{
882 						PIXEL10_0
883 					}
884 					else
885 					{
886 						PIXEL10_20
887 					}
888 					if (Diff(p[6], p[8]))
889 					{
890 						PIXEL11_0
891 					}
892 					else
893 					{
894 						PIXEL11_20
895 					}
896 					break;
897 				}
898 			case 74:
899 			case 107:
900 				{
901 					if (Diff(p[4], p[2]))
902 					{
903 						PIXEL00_0
904 					}
905 					else
906 					{
907 						PIXEL00_20
908 					}
909 					PIXEL01_21
910 					if (Diff(p[8], p[4]))
911 					{
912 						PIXEL10_0
913 					}
914 					else
915 					{
916 						PIXEL10_20
917 					}
918 					PIXEL11_22
919 					break;
920 				}
921 			case 27:
922 				{
923 					if (Diff(p[4], p[2]))
924 					{
925 						PIXEL00_0
926 					}
927 					else
928 					{
929 						PIXEL00_20
930 					}
931 					PIXEL01_10
932 					PIXEL10_22
933 					PIXEL11_21
934 					break;
935 				}
936 			case 86:
937 				{
938 					PIXEL00_22
939 					if (Diff(p[2], p[6]))
940 					{
941 						PIXEL01_0
942 					}
943 					else
944 					{
945 						PIXEL01_20
946 					}
947 					PIXEL10_21
948 					PIXEL11_10
949 					break;
950 				}
951 			case 216:
952 				{
953 					PIXEL00_21
954 					PIXEL01_22
955 					PIXEL10_10
956 					if (Diff(p[6], p[8]))
957 					{
958 						PIXEL11_0
959 					}
960 					else
961 					{
962 						PIXEL11_20
963 					}
964 					break;
965 				}
966 			case 106:
967 				{
968 					PIXEL00_10
969 					PIXEL01_21
970 					if (Diff(p[8], p[4]))
971 					{
972 						PIXEL10_0
973 					}
974 					else
975 					{
976 						PIXEL10_20
977 					}
978 					PIXEL11_22
979 					break;
980 				}
981 			case 30:
982 				{
983 					PIXEL00_10
984 					if (Diff(p[2], p[6]))
985 					{
986 						PIXEL01_0
987 					}
988 					else
989 					{
990 						PIXEL01_20
991 					}
992 					PIXEL10_22
993 					PIXEL11_21
994 					break;
995 				}
996 			case 210:
997 				{
998 					PIXEL00_22
999 					PIXEL01_10
1000 					PIXEL10_21
1001 					if (Diff(p[6], p[8]))
1002 					{
1003 						PIXEL11_0
1004 					}
1005 					else
1006 					{
1007 						PIXEL11_20
1008 					}
1009 					break;
1010 				}
1011 			case 120:
1012 				{
1013 					PIXEL00_21
1014 					PIXEL01_22
1015 					if (Diff(p[8], p[4]))
1016 					{
1017 						PIXEL10_0
1018 					}
1019 					else
1020 					{
1021 						PIXEL10_20
1022 					}
1023 					PIXEL11_10
1024 					break;
1025 				}
1026 			case 75:
1027 				{
1028 					if (Diff(p[4], p[2]))
1029 					{
1030 						PIXEL00_0
1031 					}
1032 					else
1033 					{
1034 						PIXEL00_20
1035 					}
1036 					PIXEL01_21
1037 					PIXEL10_10
1038 					PIXEL11_22
1039 					break;
1040 				}
1041 			case 29:
1042 				{
1043 					PIXEL00_12
1044 					PIXEL01_11
1045 					PIXEL10_22
1046 					PIXEL11_21
1047 					break;
1048 				}
1049 			case 198:
1050 				{
1051 					PIXEL00_22
1052 					PIXEL01_12
1053 					PIXEL10_21
1054 					PIXEL11_11
1055 					break;
1056 				}
1057 			case 184:
1058 				{
1059 					PIXEL00_21
1060 					PIXEL01_22
1061 					PIXEL10_11
1062 					PIXEL11_12
1063 					break;
1064 				}
1065 			case 99:
1066 				{
1067 					PIXEL00_11
1068 					PIXEL01_21
1069 					PIXEL10_12
1070 					PIXEL11_22
1071 					break;
1072 				}
1073 			case 57:
1074 				{
1075 					PIXEL00_12
1076 					PIXEL01_22
1077 					PIXEL10_11
1078 					PIXEL11_21
1079 					break;
1080 				}
1081 			case 71:
1082 				{
1083 					PIXEL00_11
1084 					PIXEL01_12
1085 					PIXEL10_21
1086 					PIXEL11_22
1087 					break;
1088 				}
1089 			case 156:
1090 				{
1091 					PIXEL00_21
1092 					PIXEL01_11
1093 					PIXEL10_22
1094 					PIXEL11_12
1095 					break;
1096 				}
1097 			case 226:
1098 				{
1099 					PIXEL00_22
1100 					PIXEL01_21
1101 					PIXEL10_12
1102 					PIXEL11_11
1103 					break;
1104 				}
1105 			case 60:
1106 				{
1107 					PIXEL00_21
1108 					PIXEL01_11
1109 					PIXEL10_11
1110 					PIXEL11_21
1111 					break;
1112 				}
1113 			case 195:
1114 				{
1115 					PIXEL00_11
1116 					PIXEL01_21
1117 					PIXEL10_21
1118 					PIXEL11_11
1119 					break;
1120 				}
1121 			case 102:
1122 				{
1123 					PIXEL00_22
1124 					PIXEL01_12
1125 					PIXEL10_12
1126 					PIXEL11_22
1127 					break;
1128 				}
1129 			case 153:
1130 				{
1131 					PIXEL00_12
1132 					PIXEL01_22
1133 					PIXEL10_22
1134 					PIXEL11_12
1135 					break;
1136 				}
1137 			case 58:
1138 				{
1139 					if (Diff(p[4], p[2]))
1140 					{
1141 						PIXEL00_10
1142 					}
1143 					else
1144 					{
1145 						PIXEL00_70
1146 					}
1147 					if (Diff(p[2], p[6]))
1148 					{
1149 						PIXEL01_10
1150 					}
1151 					else
1152 					{
1153 						PIXEL01_70
1154 					}
1155 					PIXEL10_11
1156 					PIXEL11_21
1157 					break;
1158 				}
1159 			case 83:
1160 				{
1161 					PIXEL00_11
1162 					if (Diff(p[2], p[6]))
1163 					{
1164 						PIXEL01_10
1165 					}
1166 					else
1167 					{
1168 						PIXEL01_70
1169 					}
1170 					PIXEL10_21
1171 					if (Diff(p[6], p[8]))
1172 					{
1173 						PIXEL11_10
1174 					}
1175 					else
1176 					{
1177 						PIXEL11_70
1178 					}
1179 					break;
1180 				}
1181 			case 92:
1182 				{
1183 					PIXEL00_21
1184 					PIXEL01_11
1185 					if (Diff(p[8], p[4]))
1186 					{
1187 						PIXEL10_10
1188 					}
1189 					else
1190 					{
1191 						PIXEL10_70
1192 					}
1193 					if (Diff(p[6], p[8]))
1194 					{
1195 						PIXEL11_10
1196 					}
1197 					else
1198 					{
1199 						PIXEL11_70
1200 					}
1201 					break;
1202 				}
1203 			case 202:
1204 				{
1205 					if (Diff(p[4], p[2]))
1206 					{
1207 						PIXEL00_10
1208 					}
1209 					else
1210 					{
1211 						PIXEL00_70
1212 					}
1213 					PIXEL01_21
1214 					if (Diff(p[8], p[4]))
1215 					{
1216 						PIXEL10_10
1217 					}
1218 					else
1219 					{
1220 						PIXEL10_70
1221 					}
1222 					PIXEL11_11
1223 					break;
1224 				}
1225 			case 78:
1226 				{
1227 					if (Diff(p[4], p[2]))
1228 					{
1229 						PIXEL00_10
1230 					}
1231 					else
1232 					{
1233 						PIXEL00_70
1234 					}
1235 					PIXEL01_12
1236 					if (Diff(p[8], p[4]))
1237 					{
1238 						PIXEL10_10
1239 					}
1240 					else
1241 					{
1242 						PIXEL10_70
1243 					}
1244 					PIXEL11_22
1245 					break;
1246 				}
1247 			case 154:
1248 				{
1249 					if (Diff(p[4], p[2]))
1250 					{
1251 						PIXEL00_10
1252 					}
1253 					else
1254 					{
1255 						PIXEL00_70
1256 					}
1257 					if (Diff(p[2], p[6]))
1258 					{
1259 						PIXEL01_10
1260 					}
1261 					else
1262 					{
1263 						PIXEL01_70
1264 					}
1265 					PIXEL10_22
1266 					PIXEL11_12
1267 					break;
1268 				}
1269 			case 114:
1270 				{
1271 					PIXEL00_22
1272 					if (Diff(p[2], p[6]))
1273 					{
1274 						PIXEL01_10
1275 					}
1276 					else
1277 					{
1278 						PIXEL01_70
1279 					}
1280 					PIXEL10_12
1281 					if (Diff(p[6], p[8]))
1282 					{
1283 						PIXEL11_10
1284 					}
1285 					else
1286 					{
1287 						PIXEL11_70
1288 					}
1289 					break;
1290 				}
1291 			case 89:
1292 				{
1293 					PIXEL00_12
1294 					PIXEL01_22
1295 					if (Diff(p[8], p[4]))
1296 					{
1297 						PIXEL10_10
1298 					}
1299 					else
1300 					{
1301 						PIXEL10_70
1302 					}
1303 					if (Diff(p[6], p[8]))
1304 					{
1305 						PIXEL11_10
1306 					}
1307 					else
1308 					{
1309 						PIXEL11_70
1310 					}
1311 					break;
1312 				}
1313 			case 90:
1314 				{
1315 					if (Diff(p[4], p[2]))
1316 					{
1317 						PIXEL00_10
1318 					}
1319 					else
1320 					{
1321 						PIXEL00_70
1322 					}
1323 					if (Diff(p[2], p[6]))
1324 					{
1325 						PIXEL01_10
1326 					}
1327 					else
1328 					{
1329 						PIXEL01_70
1330 					}
1331 					if (Diff(p[8], p[4]))
1332 					{
1333 						PIXEL10_10
1334 					}
1335 					else
1336 					{
1337 						PIXEL10_70
1338 					}
1339 					if (Diff(p[6], p[8]))
1340 					{
1341 						PIXEL11_10
1342 					}
1343 					else
1344 					{
1345 						PIXEL11_70
1346 					}
1347 					break;
1348 				}
1349 			case 55:
1350 			case 23:
1351 				{
1352 					if (Diff(p[2], p[6]))
1353 					{
1354 						PIXEL00_11
1355 						PIXEL01_0
1356 					}
1357 					else
1358 					{
1359 						PIXEL00_60
1360 						PIXEL01_90
1361 					}
1362 					PIXEL10_20
1363 					PIXEL11_21
1364 					break;
1365 				}
1366 			case 182:
1367 			case 150:
1368 				{
1369 					PIXEL00_22
1370 					if (Diff(p[2], p[6]))
1371 					{
1372 						PIXEL01_0
1373 						PIXEL11_12
1374 					}
1375 					else
1376 					{
1377 						PIXEL01_90
1378 						PIXEL11_61
1379 					}
1380 					PIXEL10_20
1381 					break;
1382 				}
1383 			case 213:
1384 			case 212:
1385 				{
1386 					PIXEL00_20
1387 					if (Diff(p[6], p[8]))
1388 					{
1389 						PIXEL01_11
1390 						PIXEL11_0
1391 					}
1392 					else
1393 					{
1394 						PIXEL01_60
1395 						PIXEL11_90
1396 					}
1397 					PIXEL10_21
1398 					break;
1399 				}
1400 			case 241:
1401 			case 240:
1402 				{
1403 					PIXEL00_20
1404 					PIXEL01_22
1405 					if (Diff(p[6], p[8]))
1406 					{
1407 						PIXEL10_12
1408 						PIXEL11_0
1409 					}
1410 					else
1411 					{
1412 						PIXEL10_61
1413 						PIXEL11_90
1414 					}
1415 					break;
1416 				}
1417 			case 236:
1418 			case 232:
1419 				{
1420 					PIXEL00_21
1421 					PIXEL01_20
1422 					if (Diff(p[8], p[4]))
1423 					{
1424 						PIXEL10_0
1425 						PIXEL11_11
1426 					}
1427 					else
1428 					{
1429 						PIXEL10_90
1430 						PIXEL11_60
1431 					}
1432 					break;
1433 				}
1434 			case 109:
1435 			case 105:
1436 				{
1437 					if (Diff(p[8], p[4]))
1438 					{
1439 						PIXEL00_12
1440 						PIXEL10_0
1441 					}
1442 					else
1443 					{
1444 						PIXEL00_61
1445 						PIXEL10_90
1446 					}
1447 					PIXEL01_20
1448 					PIXEL11_22
1449 					break;
1450 				}
1451 			case 171:
1452 			case 43:
1453 				{
1454 					if (Diff(p[4], p[2]))
1455 					{
1456 						PIXEL00_0
1457 						PIXEL10_11
1458 					}
1459 					else
1460 					{
1461 						PIXEL00_90
1462 						PIXEL10_60
1463 					}
1464 					PIXEL01_21
1465 					PIXEL11_20
1466 					break;
1467 				}
1468 			case 143:
1469 			case 15:
1470 				{
1471 					if (Diff(p[4], p[2]))
1472 					{
1473 						PIXEL00_0
1474 						PIXEL01_12
1475 					}
1476 					else
1477 					{
1478 						PIXEL00_90
1479 						PIXEL01_61
1480 					}
1481 					PIXEL10_22
1482 					PIXEL11_20
1483 					break;
1484 				}
1485 			case 124:
1486 				{
1487 					PIXEL00_21
1488 					PIXEL01_11
1489 					if (Diff(p[8], p[4]))
1490 					{
1491 						PIXEL10_0
1492 					}
1493 					else
1494 					{
1495 						PIXEL10_20
1496 					}
1497 					PIXEL11_10
1498 					break;
1499 				}
1500 			case 203:
1501 				{
1502 					if (Diff(p[4], p[2]))
1503 					{
1504 						PIXEL00_0
1505 					}
1506 					else
1507 					{
1508 						PIXEL00_20
1509 					}
1510 					PIXEL01_21
1511 					PIXEL10_10
1512 					PIXEL11_11
1513 					break;
1514 				}
1515 			case 62:
1516 				{
1517 					PIXEL00_10
1518 					if (Diff(p[2], p[6]))
1519 					{
1520 						PIXEL01_0
1521 					}
1522 					else
1523 					{
1524 						PIXEL01_20
1525 					}
1526 					PIXEL10_11
1527 					PIXEL11_21
1528 					break;
1529 				}
1530 			case 211:
1531 				{
1532 					PIXEL00_11
1533 					PIXEL01_10
1534 					PIXEL10_21
1535 					if (Diff(p[6], p[8]))
1536 					{
1537 						PIXEL11_0
1538 					}
1539 					else
1540 					{
1541 						PIXEL11_20
1542 					}
1543 					break;
1544 				}
1545 			case 118:
1546 				{
1547 					PIXEL00_22
1548 					if (Diff(p[2], p[6]))
1549 					{
1550 						PIXEL01_0
1551 					}
1552 					else
1553 					{
1554 						PIXEL01_20
1555 					}
1556 					PIXEL10_12
1557 					PIXEL11_10
1558 					break;
1559 				}
1560 			case 217:
1561 				{
1562 					PIXEL00_12
1563 					PIXEL01_22
1564 					PIXEL10_10
1565 					if (Diff(p[6], p[8]))
1566 					{
1567 						PIXEL11_0
1568 					}
1569 					else
1570 					{
1571 						PIXEL11_20
1572 					}
1573 					break;
1574 				}
1575 			case 110:
1576 				{
1577 					PIXEL00_10
1578 					PIXEL01_12
1579 					if (Diff(p[8], p[4]))
1580 					{
1581 						PIXEL10_0
1582 					}
1583 					else
1584 					{
1585 						PIXEL10_20
1586 					}
1587 					PIXEL11_22
1588 					break;
1589 				}
1590 			case 155:
1591 				{
1592 					if (Diff(p[4], p[2]))
1593 					{
1594 						PIXEL00_0
1595 					}
1596 					else
1597 					{
1598 						PIXEL00_20
1599 					}
1600 					PIXEL01_10
1601 					PIXEL10_22
1602 					PIXEL11_12
1603 					break;
1604 				}
1605 			case 188:
1606 				{
1607 					PIXEL00_21
1608 					PIXEL01_11
1609 					PIXEL10_11
1610 					PIXEL11_12
1611 					break;
1612 				}
1613 			case 185:
1614 				{
1615 					PIXEL00_12
1616 					PIXEL01_22
1617 					PIXEL10_11
1618 					PIXEL11_12
1619 					break;
1620 				}
1621 			case 61:
1622 				{
1623 					PIXEL00_12
1624 					PIXEL01_11
1625 					PIXEL10_11
1626 					PIXEL11_21
1627 					break;
1628 				}
1629 			case 157:
1630 				{
1631 					PIXEL00_12
1632 					PIXEL01_11
1633 					PIXEL10_22
1634 					PIXEL11_12
1635 					break;
1636 				}
1637 			case 103:
1638 				{
1639 					PIXEL00_11
1640 					PIXEL01_12
1641 					PIXEL10_12
1642 					PIXEL11_22
1643 					break;
1644 				}
1645 			case 227:
1646 				{
1647 					PIXEL00_11
1648 					PIXEL01_21
1649 					PIXEL10_12
1650 					PIXEL11_11
1651 					break;
1652 				}
1653 			case 230:
1654 				{
1655 					PIXEL00_22
1656 					PIXEL01_12
1657 					PIXEL10_12
1658 					PIXEL11_11
1659 					break;
1660 				}
1661 			case 199:
1662 				{
1663 					PIXEL00_11
1664 					PIXEL01_12
1665 					PIXEL10_21
1666 					PIXEL11_11
1667 					break;
1668 				}
1669 			case 220:
1670 				{
1671 					PIXEL00_21
1672 					PIXEL01_11
1673 					if (Diff(p[8], p[4]))
1674 					{
1675 						PIXEL10_10
1676 					}
1677 					else
1678 					{
1679 						PIXEL10_70
1680 					}
1681 					if (Diff(p[6], p[8]))
1682 					{
1683 						PIXEL11_0
1684 					}
1685 					else
1686 					{
1687 						PIXEL11_20
1688 					}
1689 					break;
1690 				}
1691 			case 158:
1692 				{
1693 					if (Diff(p[4], p[2]))
1694 					{
1695 						PIXEL00_10
1696 					}
1697 					else
1698 					{
1699 						PIXEL00_70
1700 					}
1701 					if (Diff(p[2], p[6]))
1702 					{
1703 						PIXEL01_0
1704 					}
1705 					else
1706 					{
1707 						PIXEL01_20
1708 					}
1709 					PIXEL10_22
1710 					PIXEL11_12
1711 					break;
1712 				}
1713 			case 234:
1714 				{
1715 					if (Diff(p[4], p[2]))
1716 					{
1717 						PIXEL00_10
1718 					}
1719 					else
1720 					{
1721 						PIXEL00_70
1722 					}
1723 					PIXEL01_21
1724 					if (Diff(p[8], p[4]))
1725 					{
1726 						PIXEL10_0
1727 					}
1728 					else
1729 					{
1730 						PIXEL10_20
1731 					}
1732 					PIXEL11_11
1733 					break;
1734 				}
1735 			case 242:
1736 				{
1737 					PIXEL00_22
1738 					if (Diff(p[2], p[6]))
1739 					{
1740 						PIXEL01_10
1741 					}
1742 					else
1743 					{
1744 						PIXEL01_70
1745 					}
1746 					PIXEL10_12
1747 					if (Diff(p[6], p[8]))
1748 					{
1749 						PIXEL11_0
1750 					}
1751 					else
1752 					{
1753 						PIXEL11_20
1754 					}
1755 					break;
1756 				}
1757 			case 59:
1758 				{
1759 					if (Diff(p[4], p[2]))
1760 					{
1761 						PIXEL00_0
1762 					}
1763 					else
1764 					{
1765 						PIXEL00_20
1766 					}
1767 					if (Diff(p[2], p[6]))
1768 					{
1769 						PIXEL01_10
1770 					}
1771 					else
1772 					{
1773 						PIXEL01_70
1774 					}
1775 					PIXEL10_11
1776 					PIXEL11_21
1777 					break;
1778 				}
1779 			case 121:
1780 				{
1781 					PIXEL00_12
1782 					PIXEL01_22
1783 					if (Diff(p[8], p[4]))
1784 					{
1785 						PIXEL10_0
1786 					}
1787 					else
1788 					{
1789 						PIXEL10_20
1790 					}
1791 					if (Diff(p[6], p[8]))
1792 					{
1793 						PIXEL11_10
1794 					}
1795 					else
1796 					{
1797 						PIXEL11_70
1798 					}
1799 					break;
1800 				}
1801 			case 87:
1802 				{
1803 					PIXEL00_11
1804 					if (Diff(p[2], p[6]))
1805 					{
1806 						PIXEL01_0
1807 					}
1808 					else
1809 					{
1810 						PIXEL01_20
1811 					}
1812 					PIXEL10_21
1813 					if (Diff(p[6], p[8]))
1814 					{
1815 						PIXEL11_10
1816 					}
1817 					else
1818 					{
1819 						PIXEL11_70
1820 					}
1821 					break;
1822 				}
1823 			case 79:
1824 				{
1825 					if (Diff(p[4], p[2]))
1826 					{
1827 						PIXEL00_0
1828 					}
1829 					else
1830 					{
1831 						PIXEL00_20
1832 					}
1833 					PIXEL01_12
1834 					if (Diff(p[8], p[4]))
1835 					{
1836 						PIXEL10_10
1837 					}
1838 					else
1839 					{
1840 						PIXEL10_70
1841 					}
1842 					PIXEL11_22
1843 					break;
1844 				}
1845 			case 122:
1846 				{
1847 					if (Diff(p[4], p[2]))
1848 					{
1849 						PIXEL00_10
1850 					}
1851 					else
1852 					{
1853 						PIXEL00_70
1854 					}
1855 					if (Diff(p[2], p[6]))
1856 					{
1857 						PIXEL01_10
1858 					}
1859 					else
1860 					{
1861 						PIXEL01_70
1862 					}
1863 					if (Diff(p[8], p[4]))
1864 					{
1865 						PIXEL10_0
1866 					}
1867 					else
1868 					{
1869 						PIXEL10_20
1870 					}
1871 					if (Diff(p[6], p[8]))
1872 					{
1873 						PIXEL11_10
1874 					}
1875 					else
1876 					{
1877 						PIXEL11_70
1878 					}
1879 					break;
1880 				}
1881 			case 94:
1882 				{
1883 					if (Diff(p[4], p[2]))
1884 					{
1885 						PIXEL00_10
1886 					}
1887 					else
1888 					{
1889 						PIXEL00_70
1890 					}
1891 					if (Diff(p[2], p[6]))
1892 					{
1893 						PIXEL01_0
1894 					}
1895 					else
1896 					{
1897 						PIXEL01_20
1898 					}
1899 					if (Diff(p[8], p[4]))
1900 					{
1901 						PIXEL10_10
1902 					}
1903 					else
1904 					{
1905 						PIXEL10_70
1906 					}
1907 					if (Diff(p[6], p[8]))
1908 					{
1909 						PIXEL11_10
1910 					}
1911 					else
1912 					{
1913 						PIXEL11_70
1914 					}
1915 					break;
1916 				}
1917 			case 218:
1918 				{
1919 					if (Diff(p[4], p[2]))
1920 					{
1921 						PIXEL00_10
1922 					}
1923 					else
1924 					{
1925 						PIXEL00_70
1926 					}
1927 					if (Diff(p[2], p[6]))
1928 					{
1929 						PIXEL01_10
1930 					}
1931 					else
1932 					{
1933 						PIXEL01_70
1934 					}
1935 					if (Diff(p[8], p[4]))
1936 					{
1937 						PIXEL10_10
1938 					}
1939 					else
1940 					{
1941 						PIXEL10_70
1942 					}
1943 					if (Diff(p[6], p[8]))
1944 					{
1945 						PIXEL11_0
1946 					}
1947 					else
1948 					{
1949 						PIXEL11_20
1950 					}
1951 					break;
1952 				}
1953 			case 91:
1954 				{
1955 					if (Diff(p[4], p[2]))
1956 					{
1957 						PIXEL00_0
1958 					}
1959 					else
1960 					{
1961 						PIXEL00_20
1962 					}
1963 					if (Diff(p[2], p[6]))
1964 					{
1965 						PIXEL01_10
1966 					}
1967 					else
1968 					{
1969 						PIXEL01_70
1970 					}
1971 					if (Diff(p[8], p[4]))
1972 					{
1973 						PIXEL10_10
1974 					}
1975 					else
1976 					{
1977 						PIXEL10_70
1978 					}
1979 					if (Diff(p[6], p[8]))
1980 					{
1981 						PIXEL11_10
1982 					}
1983 					else
1984 					{
1985 						PIXEL11_70
1986 					}
1987 					break;
1988 				}
1989 			case 229:
1990 				{
1991 					PIXEL00_20
1992 					PIXEL01_20
1993 					PIXEL10_12
1994 					PIXEL11_11
1995 					break;
1996 				}
1997 			case 167:
1998 				{
1999 					PIXEL00_11
2000 					PIXEL01_12
2001 					PIXEL10_20
2002 					PIXEL11_20
2003 					break;
2004 				}
2005 			case 173:
2006 				{
2007 					PIXEL00_12
2008 					PIXEL01_20
2009 					PIXEL10_11
2010 					PIXEL11_20
2011 					break;
2012 				}
2013 			case 181:
2014 				{
2015 					PIXEL00_20
2016 					PIXEL01_11
2017 					PIXEL10_20
2018 					PIXEL11_12
2019 					break;
2020 				}
2021 			case 186:
2022 				{
2023 					if (Diff(p[4], p[2]))
2024 					{
2025 						PIXEL00_10
2026 					}
2027 					else
2028 					{
2029 						PIXEL00_70
2030 					}
2031 					if (Diff(p[2], p[6]))
2032 					{
2033 						PIXEL01_10
2034 					}
2035 					else
2036 					{
2037 						PIXEL01_70
2038 					}
2039 					PIXEL10_11
2040 					PIXEL11_12
2041 					break;
2042 				}
2043 			case 115:
2044 				{
2045 					PIXEL00_11
2046 					if (Diff(p[2], p[6]))
2047 					{
2048 						PIXEL01_10
2049 					}
2050 					else
2051 					{
2052 						PIXEL01_70
2053 					}
2054 					PIXEL10_12
2055 					if (Diff(p[6], p[8]))
2056 					{
2057 						PIXEL11_10
2058 					}
2059 					else
2060 					{
2061 						PIXEL11_70
2062 					}
2063 					break;
2064 				}
2065 			case 93:
2066 				{
2067 					PIXEL00_12
2068 					PIXEL01_11
2069 					if (Diff(p[8], p[4]))
2070 					{
2071 						PIXEL10_10
2072 					}
2073 					else
2074 					{
2075 						PIXEL10_70
2076 					}
2077 					if (Diff(p[6], p[8]))
2078 					{
2079 						PIXEL11_10
2080 					}
2081 					else
2082 					{
2083 						PIXEL11_70
2084 					}
2085 					break;
2086 				}
2087 			case 206:
2088 				{
2089 					if (Diff(p[4], p[2]))
2090 					{
2091 						PIXEL00_10
2092 					}
2093 					else
2094 					{
2095 						PIXEL00_70
2096 					}
2097 					PIXEL01_12
2098 					if (Diff(p[8], p[4]))
2099 					{
2100 						PIXEL10_10
2101 					}
2102 					else
2103 					{
2104 						PIXEL10_70
2105 					}
2106 					PIXEL11_11
2107 					break;
2108 				}
2109 			case 205:
2110 			case 201:
2111 				{
2112 					PIXEL00_12
2113 					PIXEL01_20
2114 					if (Diff(p[8], p[4]))
2115 					{
2116 						PIXEL10_10
2117 					}
2118 					else
2119 					{
2120 						PIXEL10_70
2121 					}
2122 					PIXEL11_11
2123 					break;
2124 				}
2125 			case 174:
2126 			case 46:
2127 				{
2128 					if (Diff(p[4], p[2]))
2129 					{
2130 						PIXEL00_10
2131 					}
2132 					else
2133 					{
2134 						PIXEL00_70
2135 					}
2136 					PIXEL01_12
2137 					PIXEL10_11
2138 					PIXEL11_20
2139 					break;
2140 				}
2141 			case 179:
2142 			case 147:
2143 				{
2144 					PIXEL00_11
2145 					if (Diff(p[2], p[6]))
2146 					{
2147 						PIXEL01_10
2148 					}
2149 					else
2150 					{
2151 						PIXEL01_70
2152 					}
2153 					PIXEL10_20
2154 					PIXEL11_12
2155 					break;
2156 				}
2157 			case 117:
2158 			case 116:
2159 				{
2160 					PIXEL00_20
2161 					PIXEL01_11
2162 					PIXEL10_12
2163 					if (Diff(p[6], p[8]))
2164 					{
2165 						PIXEL11_10
2166 					}
2167 					else
2168 					{
2169 						PIXEL11_70
2170 					}
2171 					break;
2172 				}
2173 			case 189:
2174 				{
2175 					PIXEL00_12
2176 					PIXEL01_11
2177 					PIXEL10_11
2178 					PIXEL11_12
2179 					break;
2180 				}
2181 			case 231:
2182 				{
2183 					PIXEL00_11
2184 					PIXEL01_12
2185 					PIXEL10_12
2186 					PIXEL11_11
2187 					break;
2188 				}
2189 			case 126:
2190 				{
2191 					PIXEL00_10
2192 					if (Diff(p[2], p[6]))
2193 					{
2194 						PIXEL01_0
2195 					}
2196 					else
2197 					{
2198 						PIXEL01_20
2199 					}
2200 					if (Diff(p[8], p[4]))
2201 					{
2202 						PIXEL10_0
2203 					}
2204 					else
2205 					{
2206 						PIXEL10_20
2207 					}
2208 					PIXEL11_10
2209 					break;
2210 				}
2211 			case 219:
2212 				{
2213 					if (Diff(p[4], p[2]))
2214 					{
2215 						PIXEL00_0
2216 					}
2217 					else
2218 					{
2219 						PIXEL00_20
2220 					}
2221 					PIXEL01_10
2222 					PIXEL10_10
2223 					if (Diff(p[6], p[8]))
2224 					{
2225 						PIXEL11_0
2226 					}
2227 					else
2228 					{
2229 						PIXEL11_20
2230 					}
2231 					break;
2232 				}
2233 			case 125:
2234 				{
2235 					if (Diff(p[8], p[4]))
2236 					{
2237 						PIXEL00_12
2238 						PIXEL10_0
2239 					}
2240 					else
2241 					{
2242 						PIXEL00_61
2243 						PIXEL10_90
2244 					}
2245 					PIXEL01_11
2246 					PIXEL11_10
2247 					break;
2248 				}
2249 			case 221:
2250 				{
2251 					PIXEL00_12
2252 					if (Diff(p[6], p[8]))
2253 					{
2254 						PIXEL01_11
2255 						PIXEL11_0
2256 					}
2257 					else
2258 					{
2259 						PIXEL01_60
2260 						PIXEL11_90
2261 					}
2262 					PIXEL10_10
2263 					break;
2264 				}
2265 			case 207:
2266 				{
2267 					if (Diff(p[4], p[2]))
2268 					{
2269 						PIXEL00_0
2270 						PIXEL01_12
2271 					}
2272 					else
2273 					{
2274 						PIXEL00_90
2275 						PIXEL01_61
2276 					}
2277 					PIXEL10_10
2278 					PIXEL11_11
2279 					break;
2280 				}
2281 			case 238:
2282 				{
2283 					PIXEL00_10
2284 					PIXEL01_12
2285 					if (Diff(p[8], p[4]))
2286 					{
2287 						PIXEL10_0
2288 						PIXEL11_11
2289 					}
2290 					else
2291 					{
2292 						PIXEL10_90
2293 						PIXEL11_60
2294 					}
2295 					break;
2296 				}
2297 			case 190:
2298 				{
2299 					PIXEL00_10
2300 					if (Diff(p[2], p[6]))
2301 					{
2302 						PIXEL01_0
2303 						PIXEL11_12
2304 					}
2305 					else
2306 					{
2307 						PIXEL01_90
2308 						PIXEL11_61
2309 					}
2310 					PIXEL10_11
2311 					break;
2312 				}
2313 			case 187:
2314 				{
2315 					if (Diff(p[4], p[2]))
2316 					{
2317 						PIXEL00_0
2318 						PIXEL10_11
2319 					}
2320 					else
2321 					{
2322 						PIXEL00_90
2323 						PIXEL10_60
2324 					}
2325 					PIXEL01_10
2326 					PIXEL11_12
2327 					break;
2328 				}
2329 			case 243:
2330 				{
2331 					PIXEL00_11
2332 					PIXEL01_10
2333 					if (Diff(p[6], p[8]))
2334 					{
2335 						PIXEL10_12
2336 						PIXEL11_0
2337 					}
2338 					else
2339 					{
2340 						PIXEL10_61
2341 						PIXEL11_90
2342 					}
2343 					break;
2344 				}
2345 			case 119:
2346 				{
2347 					if (Diff(p[2], p[6]))
2348 					{
2349 						PIXEL00_11
2350 						PIXEL01_0
2351 					}
2352 					else
2353 					{
2354 						PIXEL00_60
2355 						PIXEL01_90
2356 					}
2357 					PIXEL10_12
2358 					PIXEL11_10
2359 					break;
2360 				}
2361 			case 237:
2362 			case 233:
2363 				{
2364 					PIXEL00_12
2365 					PIXEL01_20
2366 					if (Diff(p[8], p[4]))
2367 					{
2368 						PIXEL10_0
2369 					}
2370 					else
2371 					{
2372 						PIXEL10_100
2373 					}
2374 					PIXEL11_11
2375 					break;
2376 				}
2377 			case 175:
2378 			case 47:
2379 				{
2380 					if (Diff(p[4], p[2]))
2381 					{
2382 						PIXEL00_0
2383 					}
2384 					else
2385 					{
2386 						PIXEL00_100
2387 					}
2388 					PIXEL01_12
2389 					PIXEL10_11
2390 					PIXEL11_20
2391 					break;
2392 				}
2393 			case 183:
2394 			case 151:
2395 				{
2396 					PIXEL00_11
2397 					if (Diff(p[2], p[6]))
2398 					{
2399 						PIXEL01_0
2400 					}
2401 					else
2402 					{
2403 						PIXEL01_100
2404 					}
2405 					PIXEL10_20
2406 					PIXEL11_12
2407 					break;
2408 				}
2409 			case 245:
2410 			case 244:
2411 				{
2412 					PIXEL00_20
2413 					PIXEL01_11
2414 					PIXEL10_12
2415 					if (Diff(p[6], p[8]))
2416 					{
2417 						PIXEL11_0
2418 					}
2419 					else
2420 					{
2421 						PIXEL11_100
2422 					}
2423 					break;
2424 				}
2425 			case 250:
2426 				{
2427 					PIXEL00_10
2428 					PIXEL01_10
2429 					if (Diff(p[8], p[4]))
2430 					{
2431 						PIXEL10_0
2432 					}
2433 					else
2434 					{
2435 						PIXEL10_20
2436 					}
2437 					if (Diff(p[6], p[8]))
2438 					{
2439 						PIXEL11_0
2440 					}
2441 					else
2442 					{
2443 						PIXEL11_20
2444 					}
2445 					break;
2446 				}
2447 			case 123:
2448 				{
2449 					if (Diff(p[4], p[2]))
2450 					{
2451 						PIXEL00_0
2452 					}
2453 					else
2454 					{
2455 						PIXEL00_20
2456 					}
2457 					PIXEL01_10
2458 					if (Diff(p[8], p[4]))
2459 					{
2460 						PIXEL10_0
2461 					}
2462 					else
2463 					{
2464 						PIXEL10_20
2465 					}
2466 					PIXEL11_10
2467 					break;
2468 				}
2469 			case 95:
2470 				{
2471 					if (Diff(p[4], p[2]))
2472 					{
2473 						PIXEL00_0
2474 					}
2475 					else
2476 					{
2477 						PIXEL00_20
2478 					}
2479 					if (Diff(p[2], p[6]))
2480 					{
2481 						PIXEL01_0
2482 					}
2483 					else
2484 					{
2485 						PIXEL01_20
2486 					}
2487 					PIXEL10_10
2488 					PIXEL11_10
2489 					break;
2490 				}
2491 			case 222:
2492 				{
2493 					PIXEL00_10
2494 					if (Diff(p[2], p[6]))
2495 					{
2496 						PIXEL01_0
2497 					}
2498 					else
2499 					{
2500 						PIXEL01_20
2501 					}
2502 					PIXEL10_10
2503 					if (Diff(p[6], p[8]))
2504 					{
2505 						PIXEL11_0
2506 					}
2507 					else
2508 					{
2509 						PIXEL11_20
2510 					}
2511 					break;
2512 				}
2513 			case 252:
2514 				{
2515 					PIXEL00_21
2516 					PIXEL01_11
2517 					if (Diff(p[8], p[4]))
2518 					{
2519 						PIXEL10_0
2520 					}
2521 					else
2522 					{
2523 						PIXEL10_20
2524 					}
2525 					if (Diff(p[6], p[8]))
2526 					{
2527 						PIXEL11_0
2528 					}
2529 					else
2530 					{
2531 						PIXEL11_100
2532 					}
2533 					break;
2534 				}
2535 			case 249:
2536 				{
2537 					PIXEL00_12
2538 					PIXEL01_22
2539 					if (Diff(p[8], p[4]))
2540 					{
2541 						PIXEL10_0
2542 					}
2543 					else
2544 					{
2545 						PIXEL10_100
2546 					}
2547 					if (Diff(p[6], p[8]))
2548 					{
2549 						PIXEL11_0
2550 					}
2551 					else
2552 					{
2553 						PIXEL11_20
2554 					}
2555 					break;
2556 				}
2557 			case 235:
2558 				{
2559 					if (Diff(p[4], p[2]))
2560 					{
2561 						PIXEL00_0
2562 					}
2563 					else
2564 					{
2565 						PIXEL00_20
2566 					}
2567 					PIXEL01_21
2568 					if (Diff(p[8], p[4]))
2569 					{
2570 						PIXEL10_0
2571 					}
2572 					else
2573 					{
2574 						PIXEL10_100
2575 					}
2576 					PIXEL11_11
2577 					break;
2578 				}
2579 			case 111:
2580 				{
2581 					if (Diff(p[4], p[2]))
2582 					{
2583 						PIXEL00_0
2584 					}
2585 					else
2586 					{
2587 						PIXEL00_100
2588 					}
2589 					PIXEL01_12
2590 					if (Diff(p[8], p[4]))
2591 					{
2592 						PIXEL10_0
2593 					}
2594 					else
2595 					{
2596 						PIXEL10_20
2597 					}
2598 					PIXEL11_22
2599 					break;
2600 				}
2601 			case 63:
2602 				{
2603 					if (Diff(p[4], p[2]))
2604 					{
2605 						PIXEL00_0
2606 					}
2607 					else
2608 					{
2609 						PIXEL00_100
2610 					}
2611 					if (Diff(p[2], p[6]))
2612 					{
2613 						PIXEL01_0
2614 					}
2615 					else
2616 					{
2617 						PIXEL01_20
2618 					}
2619 					PIXEL10_11
2620 					PIXEL11_21
2621 					break;
2622 				}
2623 			case 159:
2624 				{
2625 					if (Diff(p[4], p[2]))
2626 					{
2627 						PIXEL00_0
2628 					}
2629 					else
2630 					{
2631 						PIXEL00_20
2632 					}
2633 					if (Diff(p[2], p[6]))
2634 					{
2635 						PIXEL01_0
2636 					}
2637 					else
2638 					{
2639 						PIXEL01_100
2640 					}
2641 					PIXEL10_22
2642 					PIXEL11_12
2643 					break;
2644 				}
2645 			case 215:
2646 				{
2647 					PIXEL00_11
2648 					if (Diff(p[2], p[6]))
2649 					{
2650 						PIXEL01_0
2651 					}
2652 					else
2653 					{
2654 						PIXEL01_100
2655 					}
2656 					PIXEL10_21
2657 					if (Diff(p[6], p[8]))
2658 					{
2659 						PIXEL11_0
2660 					}
2661 					else
2662 					{
2663 						PIXEL11_20
2664 					}
2665 					break;
2666 				}
2667 			case 246:
2668 				{
2669 					PIXEL00_22
2670 					if (Diff(p[2], p[6]))
2671 					{
2672 						PIXEL01_0
2673 					}
2674 					else
2675 					{
2676 						PIXEL01_20
2677 					}
2678 					PIXEL10_12
2679 					if (Diff(p[6], p[8]))
2680 					{
2681 						PIXEL11_0
2682 					}
2683 					else
2684 					{
2685 						PIXEL11_100
2686 					}
2687 					break;
2688 				}
2689 			case 254:
2690 				{
2691 					PIXEL00_10
2692 					if (Diff(p[2], p[6]))
2693 					{
2694 						PIXEL01_0
2695 					}
2696 					else
2697 					{
2698 						PIXEL01_20
2699 					}
2700 					if (Diff(p[8], p[4]))
2701 					{
2702 						PIXEL10_0
2703 					}
2704 					else
2705 					{
2706 						PIXEL10_20
2707 					}
2708 					if (Diff(p[6], p[8]))
2709 					{
2710 						PIXEL11_0
2711 					}
2712 					else
2713 					{
2714 						PIXEL11_100
2715 					}
2716 					break;
2717 				}
2718 			case 253:
2719 				{
2720 					PIXEL00_12
2721 					PIXEL01_11
2722 					if (Diff(p[8], p[4]))
2723 					{
2724 						PIXEL10_0
2725 					}
2726 					else
2727 					{
2728 						PIXEL10_100
2729 					}
2730 					if (Diff(p[6], p[8]))
2731 					{
2732 						PIXEL11_0
2733 					}
2734 					else
2735 					{
2736 						PIXEL11_100
2737 					}
2738 					break;
2739 				}
2740 			case 251:
2741 				{
2742 					if (Diff(p[4], p[2]))
2743 					{
2744 						PIXEL00_0
2745 					}
2746 					else
2747 					{
2748 						PIXEL00_20
2749 					}
2750 					PIXEL01_10
2751 					if (Diff(p[8], p[4]))
2752 					{
2753 						PIXEL10_0
2754 					}
2755 					else
2756 					{
2757 						PIXEL10_100
2758 					}
2759 					if (Diff(p[6], p[8]))
2760 					{
2761 						PIXEL11_0
2762 					}
2763 					else
2764 					{
2765 						PIXEL11_20
2766 					}
2767 					break;
2768 				}
2769 			case 239:
2770 				{
2771 					if (Diff(p[4], p[2]))
2772 					{
2773 						PIXEL00_0
2774 					}
2775 					else
2776 					{
2777 						PIXEL00_100
2778 					}
2779 					PIXEL01_12
2780 					if (Diff(p[8], p[4]))
2781 					{
2782 						PIXEL10_0
2783 					}
2784 					else
2785 					{
2786 						PIXEL10_100
2787 					}
2788 					PIXEL11_11
2789 					break;
2790 				}
2791 			case 127:
2792 				{
2793 					if (Diff(p[4], p[2]))
2794 					{
2795 						PIXEL00_0
2796 					}
2797 					else
2798 					{
2799 						PIXEL00_100
2800 					}
2801 					if (Diff(p[2], p[6]))
2802 					{
2803 						PIXEL01_0
2804 					}
2805 					else
2806 					{
2807 						PIXEL01_20
2808 					}
2809 					if (Diff(p[8], p[4]))
2810 					{
2811 						PIXEL10_0
2812 					}
2813 					else
2814 					{
2815 						PIXEL10_20
2816 					}
2817 					PIXEL11_10
2818 					break;
2819 				}
2820 			case 191:
2821 				{
2822 					if (Diff(p[4], p[2]))
2823 					{
2824 						PIXEL00_0
2825 					}
2826 					else
2827 					{
2828 						PIXEL00_100
2829 					}
2830 					if (Diff(p[2], p[6]))
2831 					{
2832 						PIXEL01_0
2833 					}
2834 					else
2835 					{
2836 						PIXEL01_100
2837 					}
2838 					PIXEL10_11
2839 					PIXEL11_12
2840 					break;
2841 				}
2842 			case 223:
2843 				{
2844 					if (Diff(p[4], p[2]))
2845 					{
2846 						PIXEL00_0
2847 					}
2848 					else
2849 					{
2850 						PIXEL00_20
2851 					}
2852 					if (Diff(p[2], p[6]))
2853 					{
2854 						PIXEL01_0
2855 					}
2856 					else
2857 					{
2858 						PIXEL01_100
2859 					}
2860 					PIXEL10_10
2861 					if (Diff(p[6], p[8]))
2862 					{
2863 						PIXEL11_0
2864 					}
2865 					else
2866 					{
2867 						PIXEL11_20
2868 					}
2869 					break;
2870 				}
2871 			case 247:
2872 				{
2873 					PIXEL00_11
2874 					if (Diff(p[2], p[6]))
2875 					{
2876 						PIXEL01_0
2877 					}
2878 					else
2879 					{
2880 						PIXEL01_100
2881 					}
2882 					PIXEL10_12
2883 					if (Diff(p[6], p[8]))
2884 					{
2885 						PIXEL11_0
2886 					}
2887 					else
2888 					{
2889 						PIXEL11_100
2890 					}
2891 					break;
2892 				}
2893 			case 255:
2894 				{
2895 					if (Diff(p[4], p[2]))
2896 					{
2897 						PIXEL00_0
2898 					}
2899 					else
2900 					{
2901 						PIXEL00_100
2902 					}
2903 					if (Diff(p[2], p[6]))
2904 					{
2905 						PIXEL01_0
2906 					}
2907 					else
2908 					{
2909 						PIXEL01_100
2910 					}
2911 					if (Diff(p[8], p[4]))
2912 					{
2913 						PIXEL10_0
2914 					}
2915 					else
2916 					{
2917 						PIXEL10_100
2918 					}
2919 					if (Diff(p[6], p[8]))
2920 					{
2921 						PIXEL11_0
2922 					}
2923 					else
2924 					{
2925 						PIXEL11_100
2926 					}
2927 					break;
2928 				}
2929 		}  // switch (pattern)
2930 	} // for (x)
2931 }
2932 
StripAlpha(u8_t * dest,const u8_t * src,int width)2933 void StripAlpha(u8_t *dest, const u8_t *src, int width)
2934 {
2935 	// we don't care about transparent pixels here (on the assumption
2936 	// that the original image didn't have any).
2937 
2938 	const u8_t *src_end = src + width * 8;
2939 
2940 	for (; src < src_end; src += 4, dest += 3)
2941 	{
2942 		dest[0] = src[0];
2943 		dest[1] = src[1];
2944 		dest[2] = src[2];
2945 	}
2946 }
2947 
Convert(image_data_c * img,bool solid,bool invert)2948 image_data_c *Convert(image_data_c *img, bool solid, bool invert)
2949 {
2950 	int w = img->width;
2951 	int h = img->height;
2952 
2953 	image_data_c *result = new image_data_c(w*2, h*2, solid ? 3 : 4);
2954 
2955 	// for solid mode, we must strip off the alpha channel
2956 	u8_t *temp_buffer = NULL;
2957 
2958 	if (solid)
2959 		temp_buffer = new u8_t[w * 16];  // two lines worth
2960 
2961 	for (int y = 0; y < h; y++)
2962 	{
2963 		int dst_y = invert ? (h-1 - y) : y;
2964 
2965 		u8_t *out_buf = solid ? temp_buffer : result->PixelAt(0, dst_y*2);
2966 
2967 		ConvertLine(y, w, h, invert, out_buf, img->PixelAt(0, y));
2968 
2969 		if (solid)
2970 			StripAlpha(result->PixelAt(0, dst_y*2), temp_buffer, w*2);
2971 	}
2972 
2973 	if (temp_buffer)
2974 		delete[] temp_buffer;
2975 
2976 	return result;
2977 }
2978 
2979 }  // namespace Hq2x
2980 }  // namespace epi
2981 
2982 //--- editor settings ---
2983 // vi:ts=4:sw=4:noexpandtab
2984