ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/util/enlarge/hq2xa.C
Revision: 1.5
Committed: Sun Mar 4 18:43:14 2007 UTC (17 years, 4 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: rel-2_0, STABLE
Changes since 1.4: +1 -1 lines
Log Message:
*** empty log message ***

File Contents

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