From 974980e3e4d4b7ace5b2f64c14a8ad6b80d28d85 Mon Sep 17 00:00:00 2001 From: tantanGH Date: Sat, 25 Mar 2023 23:16:40 +0900 Subject: [PATCH] initial release candidate --- PNGBM010.ZIP | Bin 27755 -> 27811 bytes README.md | 37 +++++++++++++++++++++++++++++++- src/bmp_encode.c | 38 ++++++++++----------------------- src/bmp_encode.h | 3 +-- src/main.c | 4 ++-- src/png_decode.c | 54 +++++++++++++++++++++-------------------------- src/png_decode.h | 11 +++++----- 7 files changed, 80 insertions(+), 67 deletions(-) diff --git a/PNGBM010.ZIP b/PNGBM010.ZIP index 9853f7c23b0f750c9ad5e8f5541a3442d59e014e..c358aa2de45f4740066e11d1a91cefd209980b07 100644 GIT binary patch delta 27702 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 delta 27645 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 z CZZdEhVaY^l-2#)}=RvFmh+m2a`Is;|IHR!xKUZ7o_b;4dDrk3Wp@NAQ+7jnhi zjjP1mkuw@B2Y1!Wk5N zNqHdE&HkZK5gm-i{nk?0zTZHTY6&*IBi7_hu;bsu>f89hvlroeFp)MB+KkXV z;67ArT~(6A6f=~wbXh{kPj31J3Q`e|%&Jl$_-d4YeBnXx!}wcklc=yK)6w?YM8w!t zZ>%VUnS@KuT3S!!%o24ox7QhLp8MApu9$WHr>{4lP_WuiEqb#OG&_{=7fATC!u&BN z<5s;f%tSG>9Q~%7plu9cn@&=#Ge15z4XuQkJc%nrF@-R5hjuk`=o^i!{UzF3Gfy67 zp4=>dJozY1O&$3XW|*2VZ@4V*#cJhi2;qxGGTa5B1bRp=Gb>sRaB z>#E)zyvI8ND}4XDc?68H3cR=9V8B*NMq5;Gyf*hp4MY&}2ixclqwNs%h^H0&(_EFs z^a(aKtB~#ZzZ*T<^GAsh_d^4|5B7=!G&wqv-ln#=dBeZ@fmmsu~58p#Mt39RVe zr$^6lS*1}&k^HG7zn1Xt(P6we0({edx-LhonQSc8{bct3^Buv45N!+9A=Vu+yRsC< z476t!Jgs5mK!08!x(l;AJrZDDT{-LOW>X`!a?m&yuJO<64id8`5_7LB!oD+u0re+Q zR`<$s+-nQTeVb&V)lAz*>t}X8JSz@ck1EIE#)g^Cnr7kMY=&C`8+$xS^o%us3%Bd# z0XrFp zQI17(BpgX63H~01fls$VYZRtScoY{zL@l&v5S3xNgvW8($4a-t()r^Otj6_dtey>h zH`z>WGEnnE$^#(;22Y*4q#OJcDx=2%SClpq694U0@c@)8aD8Qq}bNl2PVqJ-2 z|7moDT5r&I89x%zYZbiq5RLQnK`hG(B)YtHg@S%xkYnm6?|D>(elM19=y?>phUhGl z7&Pqh58+0NVbQSQXJtgcK$2)zVUiP;?C(__bgaRR=bMa}x&(55{zN+o(roGrXPT~U z37_Q?VS1T`d^=HpV$;joq8sagDrig_-I>S@2_jC{?V4?--O>L!O4GivVR<3umfj!2 zI(!Ov#&q#`r?jEhtHVd(G4)wB#|Bx0pJ?hQ>v_~NF93ce;Mr!We}JX_T$t6lZWd68 zB)LX_ZF-?d?PTc9(4Hp91C>eq) zZjak#)ZEjXep?rAs4Y4Lqw4hy%Z;a@Evh+mOaE`k@R{R3$?(jE_hr~lCS$Nne&?B` zs(^LPEYN3KHX~`-==i{YOgsJ+7XC@DNW{Wl;5^0qNebZhMnx&!|3OO{N~z$5k4!hV z-bd0z59Nk`o`>m~EM14|d`7&Kr;|Hyy$meJ55~#>A<$W3+*+H+URYZX>(%R0{d+2vXz54D8^7_&^|c@vls23K3Qq8C>45AA%J{~4`Mp1 z8qD*PD;N_4xgGDLh}cq91O5t08%WBGCave{us7j<1S8`Mf{lh5mH~YOKFO2SxCKvE z{M8?#rEqE!asp{lp$D~7lm@K_rlZTCtSUDkS6w8LL`mCNjCToC=ZT4`b%3_^&1+=ez6S*_#O4^7}p@fBb|7$CuzhwAZ zD;+aS20Vi=4|9+KdlJKk>zE6V)|ZiZgpNah-f}Gme@($araSeUO?QBTcWJSXL+@y4 zxysF^W-WW>8{CJ`PtD}^VKu&e*j7JC4w+_Vy@N5jFy|fKOHnn>e5X2L*@wb=Q1`v# z@NF+Y++UOk1?U{w@6AP*iZuZhr%^T0ZP z;Dw~RAiUqC^T$?!_k~Z@E;8WWm2gLq9pWh3ULfZp15O7HIEoze*L?gvWVPbC0VHS@ zd38FctzM{;?`{4zNy3GC>Ainvk924Y$QOEqtK*WrpkX?x{+-Ih92ZKg6nOy%m$~a_ z-Usrt>;maq=vrt`9q(aJ93Qn*VkL2Zz`MqnBck~=`nRgHS=eXfseZ+GjYN27FB9Jp z1*&HWCoU9l!hul^^u?j~NF>BN)*kU9dN20H#B%)gAl^kMWxgSMs|el0{3|!YOlPaN zfx2Wc3SA(xUo7}I#AnAbke3X+4kNTQ=qBD157NJ^HNsn_N5Q})jQX-Ho2o*8O&<2( zh)mN^x*FYnKu&qdZA3HX!a}I+)DjPLb|d2S4?!HVH_w8))3phnu)@nSRh4M5C&=~o zMoxs=T{vI=aOBi441#&4iYupB_=`q-stNoBb%E7p^K6h&&=~AH$zlxHKJ{-70wq=T z^mnTI>2FjgroUAkZQGZ=vx3Nf&JAlMcOAV}0exSGWE0H0>6X20#cjTuw?*&lp`?oF z9YPOk=sn>ZqN&KWbI)S~=IARfb zEh?~be7_RkGNaEpqL$)Xuogru^;iIuqJtk;`-R-M#@fZ-dN6^axcIJrL(keuqsD1b zSp$|yH06!PR+QDxhCUk$alJXNhmnP!#Q==x+7Ecw9Bc(iSVZ@@;4cOEj0FA0w!o)t zp-pzTrx4lku6>W^M5;l;nVm`ruQAl55yg~P}N%b=7W5sPL58pT)=BBc3jk{11#LvX%P~7M_z5SdBr5 za^~+Km>mRj7BD-Q_!Jx2fd3S%xUE9NQM*&-X2orTfrIZhxx&*{$CVp+2f2_CAP3K2xtgmjPQ1WIl3_8UXDrSm}8Ri z=+i>7$IOg1Lhm?#NrDkuG6FG8GNmCc^fcC`aAjedIEzVA=-mN2)dSKzV`i(C;JVT% zf^&otg&KUyZcBBl*n+>Oti<0a-PLjhJkCMXnKG)b>tB--cW8s^IX+9Y$2SCFB%<$o zkaK1OK7SSB^VdLfTP;A~iFk|F!`LJSX;Gl9o`}6$nms5(mLfaIu z^5ALZ0?0w%rlT@|ho5{D2yu>}u9S^WIOYN0@9PzTy3scQ6d4d}M=RE#I}5qlpmp`{ zP*mS3ooSMkYhLdRG-&6ewlY*9BYGxqcLXVmIca(|Ii|22IM zA6HJF$ZtCeCHSCYFJN4KX3<%>Za7oI=%BODI0oo{T?4I&Fg{kAs*G83r{AL{I+3^irFw*$bj_aOXg%Ew1~o*N`L!- zPqvX7p|x5kd~1k-<14hBEG9k=kcUcSh`Gd=#B3#d85P0CRg{ng(Ei@yyP|DG1(d0!sd;pRjxwrul_ z5aKPVzl|;j+H56A7$I7gf3f~*XlrMDlUG@YPa{DJtB957cd+twVX$eq06}W0E>582 zxqx-s>zs&<2Rhcq7Agz1E&>U1R*jD}YMX_BBP2@1#P*9@t~w036F7BIq1NA=CI|e+ zP$S5#RX%hM6^GR1s^vmI)Z$)NG3BrZrX{C;_E%XbZZnxMYjQi-n3Hxau{7U~Hr9H7 zbi6Jy*5D(f?Fw|0Z?-H)mFN4m)LKTM1%xlqy?tn885+HTQ* zcY*M&ATrKu#>^Gph_b$`^2cK_!R zovGyM_;i}u$x_aNNAfV`UGPmCxxtZt&t)JVEh~pXVp5F;d~n zm4!*E!r;o;nk#yfK-T9Tz9qH{sp?5SPb!!z!sTEt5Fw8C35?Agl~Z2@;`CM`SoBoP zf%0;pLbZS4QGAngX$!$fRdHqrYDtTv>(PXQ2EvFKW56&avrrK#s9=g&Kc_F~5ylBP zIu^!nYXNIE>Dc6!D+;@Z@72(MBb|gn-?Yr?2mT*d=XRSV~Exo~?joFP;F?ZOSCYPHc@w_E3o!QTu@H(-79Pi=lY{d)c z`$#dRmuap~n(k0+e0NAzD?uiEJdTlDQh3f|AP%`-9z|}DE6A+E!j=;YA`)`7;m_c? z>JU3!#fO%H1;KN00<1UK`Dutf-XAGsP(rK?g}l8;PC22#Z=;}p2=QkqLP(m2%9T)Y zCRBJp#Sf_PAO})}5K8GfK0G6Jj_^#@vEixE@_;3QQ&~ z%O7T7MF@#IK!5hqvH`<}86m{aN)e()3|9yV!S@jZ{{{inBZgdV&|-3~$fUa9b|EGo z-d^zL{Wny{lvATa9>Z#~6RhZ&mRppGoALLkcs`|MP^X`NYR+G1;kW~)pt#+P{+&v! z5ytkGsT|5mA*+&Q@&Ie2R;u~nV^qMZ(mTe8=N*8Ks_}lkD{$IfE0TA?t>y7`ZlD8V z?F(LStP#4G1Y+YnI%dplJgUdY|DK10vABNXYZ{SzVIhXJOjw`ELVz;(0W8NB4iP`R5rwXLXD2Kg)Jzl0r+q{h))~=vZWzKuo(;d zw5P5#ra9`svsLRIYhmXwi7XqaA z1J5H^`x2MLFV322A& z-}WfPgC8O*vDWvK`m{n&Jc8m&sT#Gn=3bl4JewH*4yQN>gol$Q|u5rW+KM8mm6 z!=0ReTR^|L@bpr#;R$^aQvxe1F`gBo@~IwG2F>dnNepw5A?bC4fmcWMfSHg-jm|Q~ z1ml~jP%}c;c_3HS9pddWRAP8rAsdy4M-bv5+oLtu8!oGEn2P!A==2|6r=9)68zM80*}&|Fm5n^VrVhH2`XENch)*We0oe6(J?m53sEK$ zH5$_)(qPjkcydYzUIh!uOJYh6GhmeHl)=V#$yE;U9E8hi$@;eoQxSZ9og!F>v}Xm@ z(CgIS_p20oq#`(z8!IDRmEcu&Oo?-o_H}FtScd@C*oYd5`_A7QsJm;E;OU}M64`!# z&*Krh!=5muq81w;yl-jd4@qjWVw{dfpj-GTa(AlTA3 z@?mO}+9OfaxX8%DsjSv`luB17`^EF`Xp%fmA>hUU0g?~wdn?(_S25DKaQo`%9BarqD{?Z-Q ztCHaPZCW*f>NpHoBgWu*bdgkdz|^Qh;aR4-qRvmNAbD1)eARhr#U#FnId#YuX4*PrNAhf@+ERaby~Xzug*+* zZ5#w<#TLY>H<(ZR8!0J&{w+7leN|in|3abV_mx5)NbooRBp#h7pudo1;k`(lQ#&lW z9OEo7`E5f;Uu2*dbMOh#0|g#`1Fc$c3%46!J$=i3 zmsx_GC_;a_72ZY6ZNa~!Fs4dbq-E1LmpNAWUXcXp-D``nq$C45Bn2o=72cOVc z|FX8|T0P68V~etoW6#~jd=ze7SAxF?5=r@Jdojp> zD`Yj#q3jB*YD=|E_*VhwZ=rFoh-7Urz7gty1gz$Xis0sn!jY0lR9Jd*u-=(k?WWkzJv>op>2t8qCxVuCWhWxyL9mJl9d!SSjjsgVsLQlja zIf7uV=A?x3+GvVfKd;_!zV`fy^C!-o0DY1Y$v%l%;tBM&mWWHDVC8`Vww8)Zqn3yz zC}`^}@vNvN(C4zPMzIn9ev=3_PgaCBPgbFK$H`5}El7&{KmfgHhJ~b0^f1SY%osn6 z5w+zAz_7P}z7-C_uqTEY-stuM;70mj(@Yd@^J|G90_)4^y3@x_AM+eghV~kPFX4kN zSl&35P7y=O0gx7y^rK52pCt%uSE?9F1^lIy14*0Z9f8|wNo}0fSlC$TZ7-CH(DqW# z@EF5P)_(l!Jz8kMHy05$9Fe<>qGz*m37-uHf)LJ_lhUNq1% znGP@ylQc?xs_xWL%C`({Emono4$Wn>4(Fh7W?i90hv_su{&gEi6>6!%V4V;(sH`kWm#{#ZpqD&MD znxzm~;a_AuLb%a0DoeC}dcCl@V_u`&pfTi4s*$~q@=lxEXyc?&u|Py_!qT!u4fHRMXD1QAm6=cDl+6jw@S%> z2o!*SjkBSMzOhvg{pln^OmF$+T6kNHd?CUxYs4QSG!warkoA>$0J9rsN#saK^4c_l z^#UX!5CA-UQ`-a5>b4~Ty?d=J!Dq4*zD0itTF*Ocz!DJ1P9HiuyQv7`%=+0)2EvmS zmK>1~tG>vLvu?$)TX8n6I8H0BQ!CE46=&Cq}*|Ly2k!)W9cta2UKU^mY{lC0OAS2o<2e z%d!4?XQB$w;pH$3emmkZip0PEXZb}a%dac%Fla-43s7gOQ~hjZ4hQ^MhHLC>d^=hD zK#+-6Qe&hwGKM@EF~ja4j$qDzfC3ob~dkIF==DFYrQ&=s&P{42jpeDUvs5i4mh z#!TZ!#u!v9ahfuRkF@Ls$bz)V~$(3QTrr+2kj`-CYaBb zD+(Aj3-B4hm%reh`vnEapS)|3@3x~!OlpJ>ZLLjY3OT^_N>Owc zLVTt!842}|M81Iq$O+$n`UoswFbF>_G+*U`$QSV10w(5~kq&tS!5a{ZnEv3`f;Zrq zhw>S2XqA0{!APtjZ)-8<@n-N6WZu?y@!O-Ig}@4!1wC(Vp(0K_Mji`)A0rvQ0|s$1jM}oV zwjdAQ7Bs9&Cb+_k0ZPP#6b1Md9@=I~7F#B^_U1g?0y#ZT%mQ0%P|nhEsfgGzZ_Wwe z`${Rk?HBxKS!56|He6b&b=y`8{c;PpL64-odVF5FMCxm~*;-kcm;|&!Ps|dA?>wT5 z1K*G7!7O0i-F$g}3&;a4FEaBkqhun^@}g}=6Ou5dp%nMHHlOY{7#S47&(@(+M}wc2 zAzpD8Ibr}+@ydBON(Y1^riW4zfjnW%*o^ZtqZ84)1pqn8C1@D_CCa78-3vgmas24@ za_AXB#FH{qfPx0TjPwY{Qdv1Src7CyS$qk5T{8ToBJMkX?Hn^b==HZpKoa~bv#!j7 zwu(>v#H&FvT87x3$QR`J_Y+rAMzFNi0w~c^4f79ri!Hdx{0oiI__m1v-#=h|XsDkJ zUZ99dM_hn;0<>rg8rx6?o}LWPKkrQSWsokE;O{rR;VDI--d@Ph6W?_6BEM5818g*m z-f3to^2;)Rc`!s?DDLitaIE(Mo?dA3{U5@K=Loa6cS9+}6nPFi3>sIMUBJijK+#3F ze}FNq%e4&+MUBSky!zs?vtfP=I9@0WJM-h2<7XZtDdhD;jO*(wjLwdZR$6D?J!G}* zF%rQ7`yPz$Ld`}PF`B`XXMuHt|KaP2m`8$8XPw}G2=P&N7!qx#BYux-8ykzG4bx4x zH-;A;hwZ5W=<_0(bZbT@$`0fVC+2z{Cv&D@?t=t5)2hsTV~H3=&)Q$Cfl(u7Hf57?4xcFs7nRX>-SO}G^^>C@d|${s{)nP-flp}nW8gHO zS6?!AHfY`C6-CNYtq0hU_n9BV{#b{08Iz`eG?e6{E>&?T4#kx0Db_weby%oadPo(% zt2A*EBjP2+wpTeIBhxenR|>HJTIWP)l`Tu6mnT1t35^?I}Vp!J*mt)q*p3p;X9ab z7ePO>wQd&Op?kZjsHwQA7~1c5<}l>BL;CCpzGe7M3EBwx^Gv^iEgUJNb@Hqc|1L1( zm!3HU`8^?zwfXxDa_je}(`jFhd?oA5r0o~wGI z@1lBum`uKPC;UHN;B;|zcIMeL?d|QmxVk#ye=xz@^T_T+5R5k8x7)#RmK)7~_YCkE zHA>?|m*X|Q{&jSD+inFenJL8{e5NP;J3<zJN||d@AnHC3b~v==9sBv%yH98 z`a}?)c#?BYE+wa2bWQ>pkFRrd?4f&7$NL^OFcv5P%@<}l|ym;m&W z$N;&Dtd(}{r0Uw55$L(r(DO&B!W&)G1-c&xz~L^Qx_r!%mBR=NyP=Z>j|7Y;1FYL;n{o_s%w%QUGKl{(PSRy%Q_e0u)`+gf+^OnaF>X|>Z?wCv3zTYx%5>ZM7fBDs%aPN9dXB%7J z(7>SfL_&>fse7HM6Tb+%gkE;a)oU~^PhPgu6zC6+6(`vlWNZu0%Fo`ncUZ3}Pv#u- z(0;0xILb47%_JtnXJD}A`c1Vr(u|tziMJi1@Prs-0D6Iiq zYU#oByy@mtK|Tr}ImoRW5zIH{zRtRcQl~^w#n)~~d)vE#-KeIRg|xEs3kw}{vsr9= zN8f)^Jbm1o_)}{jt91BUnUiZ`deUvHS9vrA?;qLO*#eGtyxRy9S_ZeiDgH^*!M7Vq z%lD>h89ZcopZr2kr&se@Sy$a+#-c7ojb^Hzt+Q9cM+f7F($bU{GW-&aDXPzd9-oS{ z=nD%e@=NL1XoWp{nVOUp_v?+Wk^O);uRwysof+CX8lm9siO7M|J>zRJ>00bM&)QX; zZAZ+vj?LJCmY3P%zdyw@Y(3!+i5z?X2>0G8l!l=qeeCbO>WS^dR$f=DLf$$X+SmP- z+5`#~S<|wiA9p4qDRij6k$%F9ZaF>xk9@L^ySG@u_N8*FSO@IPogXXx=fG;v+Nb*E z-~C5-zS?T9Rs=o?vcl!pf@L;ftlP>E^jRs z``>)*uf|RpHxRCvI17roqpb(KHW}8Ag*ei%a=+YA_j8!2Z58M4`$sYu$o*++{ z^suZ6(cEn->vd1RtT70uTd~u$S5u-VC(5)jLtIA~BLRcY5!bF%qOBvERF&AmX;!p5 z9{{$DcY!M^VaFn$;y_Ojx896!&a!bHS(H4ok{m;u3AKc`5xR=qoKsoCnHZE zt9eicG$!5p{85fHcy|9oW-e&)!B=2=o?``qO&xeJ5Wz@$s3YM1QKhMaJSql9p=MS#Sx5?%zZM_5TTxb1|s!DvoI2_GLJa2j2CnC^wh0dq$%2u2 zS1iTP$^X$PUqOe-7RvIp3w*H5#Pg(X-`H0HF0HuGP&^=hY9#;G#b0S=S&{>8M>2kJ zzjRQI26WZp(i-?a-BoOPBYFIOz}04orL?8DG`v@#RtIES#-{pRvLhqavx}-N()6=` z)Q5Hf>lb#b#Ob zX>3iIXdPZBZeV}X#|xv^JUdya^WsPEV^zLDG z?Obx_UA>p|*g`|8uouB5>2g|zXDj{uS42G$e>2@I-|SZFiA-QvWuhryWKlDv%)8Nk zHS4h&)}+8wjS&~~g3#vwv2LmKZH+>$`*}1i%uP&@xm2G|--5alRp$X?v0nvv-=d88q&#ht*J&m9@Nw)gZYL zf9cQzY8$WCwyV*Ek+Foc3)T2;uptPE-Us%zMhZbC>G8_So+w4UpoTkFpuECr+4bqA zbp}8lUI0JF=2o=6C92%HFQ+oleeZ-*M`ph=@s1z;r{$fqh zGCkwF58}d>z~FgM9_E(>7RyG7ui9aXfs_Zs@kAdIUVdS?IN~C@*aO{Twzp*%XJs*N zEsO<3K%oj#p3i50zbi@@;63VCUh)bhxDLHY4;!P+xv zf9Iym>tf8X0ddY7#m6+E4um?7>O{x=Sz8=7`DTYc?UY+cX^vB-|9I;U^jtkaT3)~f zF6G?n@h;xz==*Yd0|h5?-{sNS;s4|$HZ$ows9(<<*d@#lh$|ef85d334p;tBL|at9 zI98bTUmOVAU7`!!Hu&{)>$tGmGGvX-(BJiCs{U>C?7=+wzbbv|Ks; zgqPWVTt6#~e7bvlNK5DlQ=tL|f-(ZyoQP%AlD;7s>%zT>5{PPej@Gu2Ic5+86SLg* z4>pp`@8c^)wZ-t^OHupxa(s`+pOEftTh)F)IfO4gxJfNB^7CUs7ad$mg=_h4Qb~r{ zMoV5y?LkaPJMn?+j)}$w2 ziv3p0Hj{QRopq6oZpu(ai=@gXxxKEoP2hzIEC*8m^Lft1WC>DnHZrOKcB2aNj`LJR z;1(V`#fITF8z|SIDu}}65@aV(Vm{ptUIM5?6RmHcj(P} zrj_4E<<_{2)7kwXtk+tZAr~mvKNZ?1dxE_2GqY(KvenoCd{)edc3=2UX}?l!@cbLr zbW@+<3#4@HE4bk0kcD|rJE>xK`V}b{J4344{}lK(dCDQ%qw$m*zn}o0-)~Ja*0cX{{nriYHFRA7OXyXZ&t&rgS6YKI)*azpMkHc(|Q6Y6!Jx zP&ix(TZtX#c3Wyu7JWM8dq_1JmpO~H_N!blPzLUU<>iiU9<{w12Y+t>5P}D>U|t?# zvu1I*{>AUjsReX!*~BUgFUA_7*|Y~cOkMvR zV0nVGR{zWI{?OuyPhgYV)_`n*B>*aYMXq~j_pyw+Z%~j>?oa{)U%>ojlNFGy+P&=l zl`co_d`(3iJ5kZEzFs7h@p=%!rBr@Ze(e>kIAN|y z6c9Pasc)PnotJvNa#&drULMrpI2=!lW(B$N944u}4X_)Gj=sk5J!;Z$?4TpAeoUt9 z2Q{@6if86pjAHZ=0Kw>Z`FvNd@UU>>N`GO-;y?2W($ zHl5h#vk(IZh~r(+ROJJGdIMV(a9o#ReRiOE5thImijp!}X0T|HgVf|9hi3VnAQ@Dq z7tt4K_4eIwtsk@bsv%vjd^_J^4;=oD zez?J_{%93H)Qmo-uVN$C9zTn)d<*z0i6mH#5Oqla3qAP{J}=0yDw<+JhO^;yg6s^s zY_292cqEULla8F;^sQtLMFfw6Tiwf!JZhjmy35H6_Es-fVhq@{6Q*6Vy;{-H)XEvgp`PuXo?+8_m`=*U_$3f( zC(OpoSYdQk!nThabw|cUFdaCC-`ZZQtor;AAd1+I`@qI{o^<{DSn_Z8FuR~}S&H3+ z^G`4_=G}4=pJYnF7BIvj(uv`*Z-5>M!WB@_V@H5<t)%ov-)b$IqAUIDfpihEGK*UH&<)nh2OU( z@!+2Q?u!@Mt%HR{Dv_k4qn@rL@*bb9p41}uqL+u^dAKqTZ;8rjO(8c%tYmpek*FCYUw`KuvXv4;gp;p7n@s=jQ9-(m%K9X+ZV- zO_^&~2tSvt?WLIN^=Ca!F!RgOQ#o+%Td$<;vzF!8^cxLRH-M7pN<^?-nsk!vGlC=` zaOu)zs|o2JwUnC~P472IoD|7Y(fXShpAG zp-|aoxrRY^JS)ZUW6gRF`o}=R%7Q(4qZdXuuTpO{%{7{J#oTaW%-cK*9x6_3TkDLi zhqE_wr1H=Jz!2GCRikV#q+;=4iO?wGzHdF07*D}EA^k|sV2Y@-@DgxY{L@_GKxB+a zS^MkL%8hCxjJhoAIqMt64Vg(`*R6cvtjl^FqqN73m{{EsnrwzdInoBT*(mQu}^l}j6WVsm=HLEiV zVHaR!3w%ue)ptF;x^ zft@p}swn8;Wp2A)Kf{ii6}49bKMh$ZSP&^24#|O-pPP>j;Dg=E>AZC1NVUgJntwGt z?ev@Rgn^_1_v0zhcOvyXfMv|KvskJ^#>Zb+^>^YK@)ved0ok}x@X=ar-gN1Z1z`u* zk&)VA?4K!4>=#+as}aHO*737>902Z*hC6YZGE|n+QNJ7u?qx`o&xv=p{VJ9a=t@s` zbd2IB$tL;Duu3YEYo?2e+D~wxeSI`R^UdPn?jL@Newk2ZizTH!=H0c<6u(hXvHURv z!R33jJMpi@dL43aUvjE9L3X9@iHV6Q@OyXgU<_KVi+?|@65!?kA7=O_@M6#~p2u7f zI^KPnBO(kIdL;~H!YVXk@~c|Y$!~*fkZYdf0jN^y0Hd6s{Cx@UWeus|%G1U|_{!V9 zjZlHvrxpcr7wfm($Uo{Gzwrv~LU)zU;jdAXPgFjUj(7ht+Y|Ltxxbo81ih~ZD{NOU z(BEolsEve-V_hv^zSA1ON7BRR3`~+y1HS|DlU4PYN@Cu>b$m~-L5o|bD%{H6tAI(E zA>^WyXoN-KN(PHsPZ6fXgQ-6jHpcFK=Ta7k6705dUObVis{I@DxB5(i{GJgeJ;ugX zLthSh4C4s`S!pQ~iop<7L>M2QL{(l~9)F8{%C}#Q_V>M!Zd$V zzmMJzEf;6DsxO}jFdS*deUv-rfXBV4#;xr)-o zL#vtSQErpq0!p+z%Cl&`-D2~iuSDq}_GtWdc#wsBB6#1zyZ*Eyq#wade3}~-3gyO& z|7rxrlfz@#)ci#7j=f2GWw6I{iz{a-ESt)tiIaAQ)qMJ7oGjr4Bpc9*SE& zO)-SwovS;7ms>qdOj_NSPMS>&%U)Kj=>i%N2p*Y7O>U~2JbB|=VmmG9o&-wwC4B^p z@L<`v{6gd;YIt_eJ*ysS@{<`xKFYr>ogFv`(FhpqgNu_#P{RHpcozZ(K0ctfX_m_s~+v{ z56M{dJJ0e?SaWTE@9aydu2D!c{#^JkK32uGdBuy| zy;)*YC#y^@+3*>~Zf--IrwahS%~tII{7RbL(7#@~qLb~t&d$7SOS08)I*{CVPx52x zoj_hw-^aT)i?T&-rj+VW|GY$q{&v@#cf&94`p&CpT3Ya_1iPTsXUj6;S_@=xTlxrg zzcJEYL5v#Mbw&V$zWu54i^Las{|Pe)@D6{nvlL42&Oz=P1Mw>Y^?>_yDMa^n(SQPC zN9p|2VddhK8D)B+*tcF!j-V0-`m@o4Vj4s;l7xMjALV3v(5rY7;MY49zgUlc2l%hI zO;d3AFXFb+27Ovhici9Qv%epuD!!d}hFzo&kCbE$k0-H6KIUHvQhqEd`Yiik?$KoO zi@ZpChSWdfD!8wsC%}rg{%T}LHd)RK@tP^rzi7P$f=96=@4Ge5?RvG-z-}%=pU8p0 zOtaX>`Vi@zX^D9XZ-c>%-LaOqzsnG#9P_!SK0B+1%ZNZI#%E_SIpO;W8+6sSN$(8) zAM2k`(>&Q=vs+){Yal>*8_8<~IW@W)kxmRyf)fkwo|`TM`@KwcDeqrrv)95~5qYG^ z)yWjW{`hS46H^OIvzCJe@M5%ErbA5?3qyLdJF4&$RQum(Wwc@)m+9XYM2C}l$5hte z%Z_2!^r=H5+4$JODI;8EYwB$1Yg*b zQ)g}=P(d)lm9MD98<`*>lNG_u_ifs~5CvCHfVvXEPjGCi+^uJC7XZoIZ9hGrEu(?A zz_Zh@#YCSq5Y;dQfj{#mwGOXqS%rP)H_&>h9jdJIWo7@#K(s|>Rfwrs>S+P8x|3RX z`sdc1SWX`yY|(Mk1Bk}+DP)#cG9~!t9k;zMB0#2PgI$S_a#8dLsW;hKX3;9%-Y8&Q zhq9&0qQ==p4kFaLggxD?>+fY#XI%h1m)r>>Hs`U<<3dtJ>U$f@8J&XTMSe0|Jnd8Z zbv8Z{6=TUoF8Tq1bIFDDis=VR#HRfnjawL0H_PuIJ9TEajD!Cn$m3>4Dnbu!JG&g& zI+9C@WGpj$FwIj3rF*>zh0lIxIs;Iw=j4(wEW7-3gY%r2Z)lzSa#j-vSrA*_RS7W^ zt-(|+SEq#@q>`8_zkqTTmo>7g7VC6Mln3_G38Qzabcdhe_e;suAA*ZfM!Q-kJW`>* zh~VmPV!<1^7}AgNG?0uT!}&;&@{`s~>>_np;`d6=2GcFY^|4C#%;5!J0N=bCVphcU z%|fc4We?uck1SkMt@_yFcbxcIxWv8{O)`Detb+aA|FIifWP$J`2d-lz)QfbWI~j@U$0&!dAP;L@?(80YmCF{qkxm>ZUM1?ifd;Q(fZwlFcc|Xanz0BQAjKpxG3OJB& zpM_}*$4PJ&n<$=FLJ^^ax{gr&1G9^+%FtzB7771~&-G&KoU1uib58yy0=*(>%&DBS zo4HNXQCx3ed4Z|n!uMEJ?4G#iI&s5R1EI~e?`49Ke&04{N2>YRue8^+ebvRf-V8olHUn`uT%%jjA$tU3u4^ z%(HUF){*3jd87h}P(^O^y;Py>gyxnfDQ16M>+61xSM6|Ef*X(f^2j)we&OBJn^1-N z%AmEnyv43bOm{Z^F+<5>5`q>jT_yL+HG1;v?m|`ta7*|gJLVq2sG~--JeGU$&l7o8 z;&%sB!y`w{-^7UtD_lv^)S`!+V|_!?wy=3k<8qNqS)KBBvz!l$y^PDWl8yAX)*bFz%7PVvqvL5qqiwT39=R&2u|B{eZP3Q%lAEj?SE@OwZ zKgk<#IvV&;*wm3{49>#*TZU*z^wEi`M#%{B$vXqYUH1o6@EY!I5Ucn$QKQ_rRpG z;y07CpXy2V1%Gyi(htAMf5h z-sqpVXtEUO6F=}LZFafEGe`*+LDtb<(u}*)eflTljjC)JN?mLyV@&-OD z4EoH;6W`A`&F_v6&&n!&wq}mwa;dF22+odfve+b`J|%y8)gf63SqKp_3MB3Q)cI59 zH}_0WEr(!GEsyD2GE#Z@Up7IvY0<}j8DU?EJf9ehS*$Y^Dz~Wi1GluEJweUHA}!KK zT89G{!(8V=j;w0ErZsv&={e~ZIzZ_@hC!hdatPC!G6}vA=NZ;eIz=f>{@Y5ADn)IuNw_or7Vd8H+PM9@)n z^t?BfFr|};=va{qpi_>p)?|~6`b;QQbtdlPejQq`BHNQbJ|Q60d=01}fK+CdnD6tt z9(uWdbOrEh)1YsPI}yzzs!y+f%r#B^^yk&>HxcxC%lCBO`tE|BUgUmqB9rC02x0M6 z6Vs{e1w-2T;YnlCW)rOzxj2~EB4JUQYa{H(2Y)enh;MispC`TiaJ#3UVivC|7OBr^ zaP`iQE05F>UswgGE1n~In1EYq&>o)Gp}mH5n=dvZlStlCavXtbpQ%SY`F!gpH?9CK zcaQ<*2_l(oUq^Ob0*>!<>EsNpz8mVIQW)xq%c`~(s(WPYx*4CSs*}S@@#gty_i<5V zT@VHA?eo9iv;K{_vL-((+QPKvg z1zkI=VF~T{d9PPh{^p}@_3^MoUJpiUv{BozQnE%6!}*q#0E&9f_9juie)jgN;tlyo zbBPVV4|n;0sIkbeD$<(^1Wz8{f27x9+w)z_myT*fchX}xgQOWQwn1>s=ZeHQjGH}H5);xQF?xucbVvatl z`bPbVPevAYA^A(z6?WK>GW0`hW9QkqA=Sm0V0rcTyCH)~-Dbj~4KmP*b90YbN5LR( zgt@EjkC{eCF9j`d0yw#jMQyNQKvu|DdIxhX)2@kS2YDEuF$~)As+?jy5Oh zGe-CdLELjQl~UFJI1T4e4!g1%Bs`yJ#`D+0^F>aD&UYM}t1Xp0+`ko6^NZ2Yuz#kY z)gROw)@Re~z#Rc|b);?R1B=Xx(VwF}SV<9(4uC1{`j6>M%E3V;s?csLoo_r}h?@di zNO8-=X6ChX{CDhciNB*1%J&m)szCqqc)#(Fk^N3*{Ec|poB7)f0Z3$2T#DM7COiEX zp4-xXA)423eeB-#_WrYttvcEoYBQ)R#|9jex8snqu~(5md+RSIo~rE6sF!r2-f{6@ zaPM`9R8i&EcoX|=heh7BCl0zfk0tn%x<$MnroCwDlvK`kiwZb8iZM(YGn5=SZ5$~G z6g0y&QH7Zu9a+6vFR=Thb~#45rbby=SwSY_tLz$f=AE}Tlj_D-sW7oFWOQADG{wYs zKizaa=>jFnq-@yRjWn%eM3nh?%qecQPzfj^7ZlylSG3z1>#{x?9c7f4f6o?ptpBjFU)KhMM5;}H!@mCK4?6lr!z%O-1Be_(I0)QSW8w0ZWppUbi84m+ zR=*n<8yoqIRg%)|s6ATceb`|=Xu#{R*z+sKu9(&tV*O{%#s99X#k|Z?lV!~GZ8Jn)4$mv%1YfIOdLLfzFZj0w&yT?r#)Ph}<;w~5Q zC}7lWkiq5-bC(!k_l)FPvF1-!tXdh%^4U5u1I@fMD&h|e2`B^sN z=(YC+ciT_<@%)<#hh$^p`L3ToQr<;jbboHO6UPKTeL= ze{GYK4m|ho%&hpLnz~k9J;Anhqfl8-p!pXP6{G*HwyrxkGH*dKY&TACClv^EDq~0=R|2oIC>|{IIoACWxdfGRQ zB6T=lr?X`3k?Gf?S-UL%AxqCdSCZ=K%aa#6xe~wtc7g6*|Mn|ex^Rp8NgQFEYez+b z>!PVgG(+ht&n2G$W74bG@!Ra^J20M?V#gBcSlRBilOt1EW^$pReo8lrf9!dI6<=Eg zXB-=Yx3`$CX@FOuL{~sv;q7~0({_>F z(7proNl?2GHH~Jr`I*}{&unYHJ6t$t$Zxg>3#Qk^#gQLd#F@ZdoAo%||E8^KRmdwG zN_h6+18%Z1F^Nnq3Q;8Z;7*NQe%P++p~#vu89$8d$AgN){MnsP?%cbREargzJ&r1^f&5*~>#lX3wH+SAj|(V=pqfL@;8|;`w+B$@ zO*P{GF44z%q+sZ;__?s`*3|e8l_Ls4J7^k)+!^mXOwNJT@pX`Ys`zCAYsjzTeeq{1 zM>g){enI{C;KW# z5!{4xLPFS?CC=&=o*#N2+%>?kd + + -o <出力ファイル名> ... 省略した場合はPNGファイルの拡張子を.bmpに変えたものになります + -s ... 半分のサイズに縮小します + -h ... ヘルプメッセージを表示します + +060loadhigh.x を使ったハイメモリ上での実行に対応しています。 + +--- + +### Special Thanks + +* xdev68k thanks to ファミべのよっしんさん +* HAS060.X on run68mac thanks to YuNKさん / M.Kamadaさん / GOROmanさん +* HLK301.X on run68mac thanks to SALTさん / GOROmanさん + +--- + +### History + +* 0.1.0 (2023/03/25) ... 初版 diff --git a/src/bmp_encode.c b/src/bmp_encode.c index 0cf9ca2..f71e6ef 100644 --- a/src/bmp_encode.c +++ b/src/bmp_encode.c @@ -8,10 +8,9 @@ // // init BMP encode handler // -int32_t bmp_encode_init(BMP_ENCODE_HANDLE* bmp, FILE* fp, int16_t half_size) { +int32_t bmp_encode_init(BMP_ENCODE_HANDLE* bmp, FILE* fp) { bmp->fp = fp; - bmp->half_size = half_size; bmp->width = 0; bmp->height = 0; @@ -37,8 +36,8 @@ int32_t bmp_encode_write_header(BMP_ENCODE_HANDLE* bmp, uint32_t width, uint32_t if (bmp == NULL || bmp->fp == NULL) goto exit; - bmp->width = bmp->half_size ? width/2 : width; - bmp->height = bmp->half_size ? height/2 : height; + bmp->width = width; + bmp->height = height; bmp->padding_bytes = (4 - ((bmp->width * 3) % 4)) % 4; @@ -94,30 +93,15 @@ int32_t bmp_encode_write(BMP_ENCODE_HANDLE* bmp, uint32_t pos_y, uint8_t* bmp_bu int32_t rc = 0; - if (bmp->half_size) { - fseek(bmp->fp, BMP_HEADER_BYTES + (bmp->width * 3 + bmp->padding_bytes) * (bmp->height - (pos_y + bmp_buffer_lines)), SEEK_SET); - for (int16_t i = bmp_buffer_lines - 1; i >= 0; i--) { - if (i & 0x01) continue; - size_t len = fwrite(bmp_buffer + bmp->width * 3 * i, 1, bmp_buffer_line_bytes, bmp->fp); - if (len != bmp_buffer_line_bytes) { - rc = -1; - break; - } - if (bmp->padding_bytes > 0) { - fwrite(bmp->padding, 1, bmp->padding_bytes, bmp->fp); - } + fseek(bmp->fp, BMP_HEADER_BYTES + (bmp->width * 3 + bmp->padding_bytes) * (bmp->height - (pos_y + bmp_buffer_lines)), SEEK_SET); + for (int16_t i = bmp_buffer_lines - 1; i >= 0; i--) { + size_t len = fwrite(bmp_buffer + bmp->width * 3 * i, 1, bmp_buffer_line_bytes, bmp->fp); + if (len != bmp_buffer_line_bytes) { + rc = -1; + break; } - } else { - fseek(bmp->fp, BMP_HEADER_BYTES + (bmp->width * 3 + bmp->padding_bytes) * (bmp->height - (pos_y + bmp_buffer_lines)), SEEK_SET); - for (int16_t i = bmp_buffer_lines - 1; i >= 0; i--) { - size_t len = fwrite(bmp_buffer + bmp->width * 3 * i, 1, bmp_buffer_line_bytes, bmp->fp); - if (len != bmp_buffer_line_bytes) { - rc = -1; - break; - } - if (bmp->padding_bytes > 0) { - fwrite(bmp->padding, 1, bmp->padding_bytes, bmp->fp); - } + if (bmp->padding_bytes > 0) { + fwrite(bmp->padding, 1, bmp->padding_bytes, bmp->fp); } } diff --git a/src/bmp_encode.h b/src/bmp_encode.h index c01e27f..c581fce 100644 --- a/src/bmp_encode.h +++ b/src/bmp_encode.h @@ -8,7 +8,6 @@ #define BMP_HEADER_BYTES (54) typedef struct { - int16_t half_size; uint32_t width; uint32_t height; size_t padding_bytes; @@ -16,7 +15,7 @@ typedef struct { FILE* fp; } BMP_ENCODE_HANDLE; -int32_t bmp_encode_init(BMP_ENCODE_HANDLE* bmp, FILE* fp, int16_t half_size); +int32_t bmp_encode_init(BMP_ENCODE_HANDLE* bmp, FILE* fp); void bmp_encode_close(BMP_ENCODE_HANDLE* bmp); int32_t bmp_encode_write_header(BMP_ENCODE_HANDLE* bmp, uint32_t width, uint32_t height); int32_t bmp_encode_write(BMP_ENCODE_HANDLE* bmp, uint32_t pos_y, uint8_t* bmp_buffer, size_t bmp_buffer_line_bytes, size_t bmp_buffer_lines); diff --git a/src/main.c b/src/main.c index 60e88e8..5994229 100644 --- a/src/main.c +++ b/src/main.c @@ -130,10 +130,10 @@ int32_t main(int32_t argc, uint8_t* argv[]) { fo = fopen(out_name, "rb+"); BMP_ENCODE_HANDLE bmp_encode = { 0 }; - bmp_encode_init(&bmp_encode, fo, half_size); + bmp_encode_init(&bmp_encode, fo); PNG_DECODE_HANDLE png_decode = { 0 }; - png_decode_init(&png_decode); + png_decode_init(&png_decode, half_size); png_decode_set_bmp_encoder(&png_decode, &bmp_encode); printf("converting..."); diff --git a/src/png_decode.c b/src/png_decode.c index 31371ad..cb11ea8 100644 --- a/src/png_decode.c +++ b/src/png_decode.c @@ -15,18 +15,19 @@ // // initialize PNG decode handle // -void png_decode_init(PNG_DECODE_HANDLE* png) { +void png_decode_init(PNG_DECODE_HANDLE* png, int16_t half_size) { png->input_buffer_size = 65536 * 4; png->output_buffer_size = 131072 * 4; png->use_high_memory = 0; + png->half_size = half_size; png->line_data = NULL; // actual width and height - png->actual_width = 512; - png->actual_height = 512; - png->pitch = 512; +// png->actual_width = 512; +// png->actual_height = 512; +// png->pitch = 512; // for PNG decode png->current_x = -1; @@ -132,7 +133,11 @@ void png_decode_set_header(PNG_DECODE_HANDLE* png, PNG_HEADER* png_header) { // BMP header if (png->bmp != NULL) { - bmp_encode_write_header(png->bmp, png_header->width, png_header->height); + if (png->half_size) { + bmp_encode_write_header(png->bmp, png_header->width/2, png_header->height/2); + } else { + bmp_encode_write_header(png->bmp, png_header->width, png_header->height); + } } } @@ -160,19 +165,7 @@ static void output_pixel(uint8_t* buffer, size_t buffer_size, int32_t* buffer_co int32_t consumed_size = 0; int32_t bytes_per_pixel = (png->png_header.color_type == PNG_COLOR_TYPE_RGBA) ? 4 : 3; uint8_t* buffer_end = buffer + buffer_size; - - // cropping check - int32_t cy = png->current_y; -// if (cy < 0 || cy >= png->actual_height) { -// // no need to output any pixels -// *buffer_consumed = buffer_size; // just consumed all -// return; -// } - - // entry point -// volatile uint16_t* gvram_current = GVRAM + png->pitch * cy + -// (png->current_x >= 0 ? png->current_x : 0); - uint8_t* bitmap_data = png->line_data + (png->current_x >= 0 ? png->current_x * 3 : 0); + uint8_t* bitmap_data = png->line_data + (png->current_x < 0 ? 0 : png->half_size ? png->current_x/2 * 3 : png->current_x * 3); while (buffer < buffer_end) { @@ -180,9 +173,7 @@ static void output_pixel(uint8_t* buffer, size_t buffer_size, int32_t* buffer_co // get filter mode png->current_filter = *buffer++; -#ifdef DEBUG - //printf("g_current_filter=%d,g_current_y=%d\n",g_current_filter,g_current_y); -#endif + // next pixel png->current_x++; @@ -265,12 +256,11 @@ static void output_pixel(uint8_t* buffer, size_t buffer_size, int32_t* buffer_co } // write pixel data in BGR format - *bitmap_data++ = bf; - *bitmap_data++ = gf; - *bitmap_data++ = rf; -// if (png->current_x < png->actual_width) { -// *gvram_current++ = png->rgb555_r[rf] | png->rgb555_g[gf] | png->rgb555_b[bf] | 1; -// } + if (!png->half_size || (png->current_x & 0x01) == 0) { + *bitmap_data++ = bf; + *bitmap_data++ = gf; + *bitmap_data++ = rf; + } // cache r,g,b for downstream filtering if (png->current_x > 0) { @@ -292,11 +282,15 @@ static void output_pixel(uint8_t* buffer, size_t buffer_size, int32_t* buffer_co // next scan line if (png->current_x >= png->png_header.width) { - bmp_encode_write(png->bmp, png->current_y, png->line_data, png->png_header.width * 3, 1); + if (png->half_size) { + if ((png->current_y & 0x01) == 0) { + bmp_encode_write(png->bmp, png->current_y/2, png->line_data, png->png_header.width/2 * 3, 1); + } + } else { + bmp_encode_write(png->bmp, png->current_y, png->line_data, png->png_header.width * 3, 1); + } png->current_x = -1; png->current_y++; -// if (png->current_y >= png->actual_height) break; // Y cropping -// gvram_current = GVRAM + png->pitch * png->current_y; bitmap_data = png->line_data; } diff --git a/src/png_decode.h b/src/png_decode.h index 9de8d40..00277d7 100644 --- a/src/png_decode.h +++ b/src/png_decode.h @@ -25,7 +25,8 @@ typedef struct { // input parameters int32_t input_buffer_size; int32_t output_buffer_size; - int32_t use_high_memory; + int16_t use_high_memory; + int16_t half_size; // BMP encoder BMP_ENCODE_HANDLE* bmp; @@ -37,9 +38,9 @@ typedef struct { uint8_t* line_data; // actual screen size - int32_t actual_width; - int32_t actual_height; - int32_t pitch; +// int32_t actual_width; +// int32_t actual_height; +// int32_t pitch; // current decode state int32_t current_x; @@ -62,7 +63,7 @@ typedef struct { } PNG_DECODE_HANDLE; // prototype declarations -void png_decode_init(PNG_DECODE_HANDLE* png); +void png_decode_init(PNG_DECODE_HANDLE* png, int16_t half_size); void png_decode_set_bmp_encoder(PNG_DECODE_HANDLE* png, BMP_ENCODE_HANDLE* bmp); void png_decode_set_header(PNG_DECODE_HANDLE* png, PNG_HEADER* png_header); void png_decode_close(PNG_DECODE_HANDLE* png);