hq2x.cpp 57 KB

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