From e110d9afe2e20355b7c80484e08e4536274d64c2 Mon Sep 17 00:00:00 2001 From: Mark Zheleznyakov Date: Thu, 6 Feb 2025 11:20:31 +0300 Subject: [PATCH] feat(01-bmpmafia): deepfryer --- 01-bmpmafia/Makefile | 5 ++ 01-bmpmafia/README.md | 19 +++++ 01-bmpmafia/assets/catstare.jpg | Bin 0 -> 64638 bytes 01-bmpmafia/include/bmp.hpp | 10 ++- 01-bmpmafia/include/rainbow.hpp | 24 ++++++ 01-bmpmafia/src/deepfryer/main.cpp | 117 +++++++++++++++++++++++++++++ 6 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 01-bmpmafia/assets/catstare.jpg create mode 100644 01-bmpmafia/include/rainbow.hpp create mode 100644 01-bmpmafia/src/deepfryer/main.cpp diff --git a/01-bmpmafia/Makefile b/01-bmpmafia/Makefile index e8a2cc4..19c568b 100644 --- a/01-bmpmafia/Makefile +++ b/01-bmpmafia/Makefile @@ -4,3 +4,8 @@ CXX = g++ nerdybmp: src/nerdybmp/main.cpp @mkdir -p $(BUILD_DIR) $(CXX) -o build/nerdybmp src/nerdybmp/main.cpp + + +deepfryer: src/deepfryer/main.cpp + @mkdir -p $(BUILD_DIR) + $(CXX) -o build/deepfryer src/deepfryer/main.cpp diff --git a/01-bmpmafia/README.md b/01-bmpmafia/README.md index 694a78c..814ba12 100644 --- a/01-bmpmafia/README.md +++ b/01-bmpmafia/README.md @@ -17,3 +17,22 @@ make nerdybmp ```sh build/nerdybmp some/path/to/file.bmp ``` + +## ๐Ÿณ `deepfryer` + +![catstare](assets/catstare.jpg) + +image binarification program + +### build + +```sh +make deepfryer +``` + +### usage + +```sh +build/deepfryer some/path/to/input.bmp some/path/to/output.bmp 128 +``` + diff --git a/01-bmpmafia/assets/catstare.jpg b/01-bmpmafia/assets/catstare.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5513155a0252deafec48ad75a0a851746db513fe GIT binary patch literal 64638 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
iko zd1TMpkYzu@MtdPOOB{qm%O6~B-s(Lrav>k<0;rCwqHYO86ywR5lV4oI3YoPDP|0Hk zVHFAP&eEBcNpA7vC~efcMJ}`Wd;Df@wr)hmwH+Kxq|SQA*804&^x7L|^RLDN$1%%~ zLIkRct-X92CQl_lOwZYO(TfK97PPOvqhbP8EDl}~K~gakv==C74WRL$xdAB+6iyOv zX71|Z7h1B>wU`Rt5#jsy9TBL#yR2A4`dkZMGgiyLfasUkJ}s(lNdv`dDBNUf=KasL zL)#(LUpBy9fCKae4JP@@PE8uX`AN}-i@T;DzW5c!_&@1`5lwP}E+jMDtcbYK5O{Dz z=7=JVmQ)K0a%JG45~4@3L<0qM=bk+nJnnun%<@~rYuv6hi?|Too2%~UxiocLgt4;y zs*_dX9AW~nI;M%PAGNd8Bom>e-H06pis=}6N8Ubf*r66z58K%dWGz~43`5+$cvbCv z>{wXWepIOZzWT}_()FT^tZ;NkyEGZA<8%bUeQka?p+Bw(KudjAGeoRE)c`S5vKjfD)Fsm^UT5WQ2VdYq3*84-Nqt=G}YIh4>vNOmU}0CN$OK+iZZD z0AmFzDdz3!dIuSW*d*rW9Wrn8T9Y&Q1anu;3O4Q--D>m7XnK6;qsM&rX_lnVH0zN; zo0i*!=jo}S7I14x%H$6g^{#f#eL*U$Ld9vtd{<+aI>_^h=*|);A#dK#UTt=G9Vm}_ z&m1?vT}&`1UiG`QkQzBZMwS;r|zCZvVY&a9UvDcU>!IE*rkSJ@p z*0B(K$KB&@pue;R-;WDEGzO~Mi!3Jv;!4!t$vnROT!JSOPd4cuuPPp_zrH4${=PWG z)KAsIi^^$NqoG}-2B7JuhC@hsWk$~}p6 zy`GohUZf#=y0vj9URR^!LEJ@Zmq1@v?hAcbvpVcYfJ@RcT1{lngl6m}w zeQgZNQ2?5B7%4{c@R!tqP$+`7fV)S0O?_$nf_>0%Q7A>xOe>eJiBY;hp3* zXdLB@lhvr53RIP0%*GFezR85N-{@ssC(auM2fFp4im5ZjKQCmG|`yCmkzM( zsPA*yjMp6v)_vlpbwyN=yqAdL{Bdm~UqIma>^j8RR;5AK4{pRMQjK!<ja7Zfn8 zlMw`zROitdNcWI-TI2`s1N(X#D+Ys_TWy^*2dd9}`Ka_ec_e{;+8J~yG0MG-(Ay!T z#CJp|B@{hT?dO8?qq>>lBFD#EGgnv?<JS+BbtJQRO7rFTDElyd2c^WGB@EZL)uw?Uy{4E)`V16Q1)V;HG=bt8%8GeKWo)XK z?i|p%?tULhXsIk8tsTa|mEkVMo__I77R(uxLc7P{;ye~YMpt!}jnz=hck3OrsgBy5 z%FHCUsJZz;LQiDMMOm{)%#<~v{N%gJI;RA+nE6^(BsvBr=wcts*KNc|zs_5E@z_uWO91~EqWDtqG`Mb~-3&#+|JQFh{R~YLZC-kQz#&&8_ z>8LuH(RqSUmVVz9UQ==rK3?JEVpJ)r##;$$=O+)tW}X{2F26tpmB-pl)h(bb-3n-81h(uvtj$tSB4`)22@%4(5;=YCHg_ zIZr~WP(l$<+qtuEijDZ~xRLae-Nm6k8Y$A~5{2+{-U}@g=SCw5p$ULF)ia}5n;sn3*0!Hx@oMTr;|`e6wUOsUo&78TN$BSyBi8<6p?K?Mf5-$ z#Od|lrYTqnU<TSaIcJmTR{vEeyDq~4l1k%Eio`TpSF=+1=VV+J<-<5Hdts-;d-ud5cL;+tD8ACOq))oExHGP0p10lPS-Q-ytXmB+vm2USg%1Tw-ri;2ZB9C1jHh$ zq{Uzl++Ttl?9-NJyt$w~FNzd1Omp1-*n9>^U`0L<%&*D$!lFS@ODs%yJp4c|rqadS z{l0V6VC9Rdlql)@2VJa#GZw>Z`4`=kJ>O8ECn?4_&@R&|EBOtrS4B_6@hSlTIX)6$ zcInkyGLi6*MXnIvglgZ>;wuh74LjKM`ZwWl=4iE|p*I&oeEbX@m|}PA;ShEzdQ4RK zl21kFEizVu%i>x8P~Mgm#_r6suC6?-_|U1Nt^E|jXH<#ygF_AsEXZ-0rR1pYn`GkL zR&(~@SCw6r=o2k9c^32+i)CtSA)$B-(J62{5D%GQmWSTWTyT`DpHx3eF}&;iC*AC= z5^bJ^3mS2$V>1@qi*~%wX7bl}5k&da-O!k&(xykzTm2#?vArRxm3fL#wV|Z3du#Yw zA#HMoTb1;Rt#yi!DQQ%1^?6M#7B|9+nB}{Tyqb-Rwi*UqAFO#eGs75orA)}cuGZcR zpsHejC!s&huMC-EWKf#;s@DCkPl$0;DZmgfkwNCq?Mo4fnSL`-+^5OV62PH2WmWOs z8hb6a1XW0;pM>PRW$tKz5n{Hp=2^;1n8$iTT*-G%7?AoOpo+RGK#Q()Fyw7w2iup& zqd?PWIMv%n%i)V_Ho7&Z3NVdpLBv$(w7-@`4Rhlam@<7?*!@ah9qB>bnzog5?gmri z3>>&iM?`#$oS*_22pMGQrz2gcn%BC>cc3|##5bbMu@)(rw{TQu^RyXE-E($E=Xhaj z6DdSY-ivyg%fw}f)ecSz1-Wya4ppK|26aKBwb4Q_ozKMCymFSO;Z6r+KTt(KY)@V6 z^%?Ns)Ip^YDp;+^b#s+&SPYio2ZKCnj!mg#79#{%fj6e4>nGUMl{2h>~J&(O+nvB%Iwq5Sn-~S6Zx-BpRU&Dy+UagpjJ`s^YvV5~E1`(RF$Tkf&@{T4yhRsM zYZ-hedXQRQ&YJqGPW?{)84Cw0q%YSnJ$Rb`wLnmUqDumJGE9y^E|mO*+rsAodA z0`?&nYEL(tjGgm^#|#$3!oBNtMR}ee;>CG*>6j|wip{FS8xT2N3@(rFKbwG(Ls>S~ zy@~SWO5*1iW4W2B(rf)zw<7)mHrfpz@|tQOE&QT*=_@8r{oRtT&O7p#mx9e$n}Vy$ zk}MSmo}z}XK%W<`DfDXgfaFv{H-B7fM<>MI}G{)z{ zByq09lqv@Q5sI?G%2OO%XWI+Ur+iSO_{#r2G_ZzV%k~)JvJxGWHo##XiYqHI?bVq; zovX91u}mDncu-#ID;McB%cw>v>x!M^(cStQKT&V6A&EQ7LvdrX96s||=tGBys!m90 zBQFQm-0VlF=gq?=L3 zQFyCc=xIIrb_SEZtG!$~D6grC2*oJa=6xK4tbyprO)E2=0JI4E`1DWHwKqYejzx$F zKY*Z3XqQh>6@*2HKIrP_M;WbbKBr#Yt}@WA55skSn4OmuxeYbxfeZ1VHksxc=L=j= zTJL)7acS37BrEy3@WQqLs_Cu}bbt=>krJ@}2*EG@0Pfky8{W`^U605Q#71-xoO`=p z9lTTeYAYZZn^6#1EFDc9y2F@&JmwZpJay&x&GK+rwiI{KXN^4Oj)?}kd>V2WkR|VL zM@S>TpoX*QhM6ilS%u$$2Km|*z{i9IR9Dec+W@ve;8o7a#zEYhhh{=TI5v?trrP{x zphINuND~x$lny*j6%Sroa`rYSx8|zRsc3Ok9b4*aqC%0H)bzK>DH4LRPVnd!`!e7c zJO5z&a5))7rW_y=f=BxZ>8&ARDLcP5zUmL~rj!}2NqF}G-@6~}Rev88>)(!#M zE~b@FRKAJnBFst#YR}b0aFljMMfRT3OF4t<)FwhxgPzrBtBS&0Y+UZo>>rzX-lG9H z50~{)L#ND-5!3)#3Rq`N4Zwo}giekgBQrl$Vv~ISl7O4_nZr@1{*I|SI;+%MNMSu3 zGNH^Eg(mm?@OI%Cdih}hdqi6O`8>ti#*!YJF0~u|TD~v{;O9~%17s!SC3((35c{p{-L+3hk&VsOwu##G=Nw(ngxOl`X`);$Vr?F0$&{MBcl#+#6 zBgAaxM^?ovVPX`RS3|CZ<*OaO@H@}Hb%fEv3cg37c}~BGG;oNg(@IXPfzpa~W(EML1Q)z&Bct_`3sS}Z!DhfnwQ};UPkBX&huN9H)Bo0!^cX5S?>y$QQqPD{HpNi zYeD`sF|2MXY1o3-FAWZhgTSDdwc)zQ;e>i}INrd+ve>v+stc_h5^*k~&9)S#*}quejfvLr8eH*y^90f5)s-+W-ZOw zlbb?d>ukV#zA^2HKG7g2BSagVHw||Kp=j9Z3;)?S{brokLboIkCvRbl;#io=-m%n} zxrbiq&IontPsEsp-%zz47R)q_DC!k)Z8IoD^&m#yk6UMA+dHb+8S-op6-L@7YX@RX)a5U-y zivFAMLCB~mMVU@}LZfgbYt7vQhM;pR7`@B#+Bn#F^Q32#K?+rG6Z64IV274J)6*1)7n}KLv;+v z;phX&hK)7i>*Dfhqm%lsS2@JWlrfLIkvBIpb~(9{r4v>kNSZQ;P*qsl=C-8@$KJc; zjZz|Yp-sg#*49@$N%I^O3?3s09lU|3t~wPK6X$0lL_p)wy)Nv{lAkPKDcs_Xl5*~Fg3yhqX$t2{AA^{RKLvcdOx0PdCze?fF> zv@-~N2w;16c>%PYbr?tAkTOFw)mEdy(T9bk=v-gn1w9!mw_5eBP$ zi?zOU#Nj!ju%7gSpbuUXsX0}Ao3PROnyC>k#0(+w(x@7O_tGmQV6z9i_L?1PabTq|IYL2K^Z%N- z5=SQg`2TD+X0DBG=AOCcKB9y&Ge>d^Q>)ODN}?#0M7G)7XCVpAeHIm!Z_1G?T_gHR zsu9wCAxZUn=KK5U_Xljx^Ld`n`~7}hpQltlpPiE$x+X%92j?n|_T6~-FiobvLhms| z{$A1EH6J(ils@{sq4=l&o9ScfFRJ+N#%_=Rhi8vSKX$D~Xk823wO<+)_9N@p_VaJA zPsjDSjM+_QqMOz79gJR@Pt(QP!__w6#p`=7QPrC`nWU){wJRufE+D|f2CY)t)F&Dr zT%HD5(|?}VL-IU=>OwBM9GNP9KrYyxOR>?aE?HHXl2a^HrU59*I)-)+&tqf@+b zaoeOrkaa^^C5uHu9gU6<#Y309YL1TI&_W`7B!^0&4G4m4j{oOH*i_DioKu&6E}g%W z3-MaN<)6lTF^AW0Gt+;qm)G%v(@EWL7M;v>@~%${>fZs!K7n2xngnvKFkCW}B})U~;+EwL4i4R959HQHix577_$)Drr|Jz-CA8 z46b7~WXP9763a7c?bX^iRlMCETI}c^DyC$%6pt-3fLNy1mNf?iqQNa^luYD0sc&x; z=zCukG;YC0lpAMk1C-y{?`WmHY9u}(!N?yw2D?dS*2xXz%{HgCwmR!TCcd(4w_dOS zg}GX&l(6x)IQb7SB)s`xhO2WmfE_Inpw4|mV{frS$stUbU~|IJ0cf3sC8g2orfyF` z?vnAz;7lz3j>+U%Ay{hv3ymV)GES09>CjQNlf2n0s5)!(UL$EQEw>2k;kXQKm+qJ= z=O3eS=oct^VAMa)359#qcBnUDUO561ZffGH%}Tbmu*8PA0Z^%PpNE~Ip@Tx_AQLNH z2W=VOXRrgg<5b*)SjP0FZS}-61^nu1$ZEYYW*f>ZE#)B_Czr2n>0AGW&DwkTCsy`H z8Eba`v)O|plCv`ErtC3pK5nfLXo)wuP`NQ$U0PMO;Pbf$2%a2Htn;(9O}_dtiHgqG zi-jF58Y2i;b9&_}FCX&LrR|vwC;B2iA<(XkA4lcxEgngH?~E_CvY!9`S(#NB&bh_*Cb#)T`RJSoBi(g5oTw02GGdH%$t=!t4`ThsbeVeXMziKNSi4E% zECDSvbNX2wE88Bf1C+k1D-tm3-8AH~fZX=i>Ed4e~C)-Q@UZP68+DFw}S#mN0 zL-q0m1%fwjnzXa%X)9vf1B4m9Gi|DvllJ9^ICC*JMu&Gx~?d zVHP=vGRa3`OrNs5b0{&JQ)7D4+7;J~7VXbjXeUSm**w`jpV>UI7GcW2ZFU{bV+{x~ zzS5ELd-8h}8N)oLpTwY1YLsMQrV^1TXCoUW)AtU7;2BKR&cEMK<5QNPBYRuNIE^xU z7nRNK6cLeOS4X9txr$l)xd;PA*+hs}DqBO%qaz@J#-(hRk$F*6~5P z5L&F7CKI@QtWei8xhYibt0!Z7>+3FyVGlSiE|=)5AWR4RcF6-VH_x;HO3Jq&4s&Ya z`AgVF2Nm@PlV)y?F^O)*GRfarl(qd7^ic=`QB}T9Mv}&Gh*SED(xE(>Q~hXdhg#A9 zgH>~GL9u8S;-Z0*+*jqim+$V{oFSO=9xwzZMSp;=T^fwv-LFe`R?fRPUp1>&RbNUW z11j9%uF`}kxNhh5`^2jfa<(jn3c;r7}^-t5%uGl<*NrPQ+U)M z#E+*Ls6>&5o0DEILO(E`?k&EcvzX8CJ$J5_a_)}y{%x5>gt?T?hpbJ};ZU~Zhp&CP zo(R}@nQk6zr&ru>#Wml4s+9GIs-NFA&r^zA$PMWen3#q2x>qA=bR>R@Q&)P;Co(s@ zi3=6_z_7pS{O%h{EjH?*JG8{b3sV5rR-+f$sG4JTDBEu@CswAA9UiA9pVC>GyKg^i zgL}0547clSt)p;${Iah1@eDT#3@~Q!cc8mJI{CIOuU+W^?7c@UhAOj@83j=(ksH%A z5%me;O!|lh=OHrvYxqVx{L9YsD^KumH9G{Qz zp-nBw!FP9(PF58;cA>IQAuePI?p!6vJ`!e4#Xt3WUm2O}DW^%YB-I-{RX3kr!vc=z z*H?N&$CC8NBK#g7QN4u@8MYA?HCe^Be?3urp)kPbvBUK3;tL7R9hc^vG$sH_#11of z&Avy^gm>~7{rn0E`$xYX{Q-nts)b_2St=C;+L)-tllBiT$u+hWR~kKQZiW6k)qLm6 z-?=1G3*Rs_eb!*6pT4%O1W4l2Vq?>z0Z1G^xM-5Lo4HV>0%6Yl(|+L7lu&pP2V7|* z`1#jEN(l})r%6)aT9`KKCIIg@N(}=FGS87Xdeu#u_lzFb>5sx7;Yh2r`!x!DW6f6} zUaL3L#zYyM)%fsU88;ZylhpA(jPziA6aUHQh(|X}STvxH%2x$}ZNwEqDjE}A>6*DcYrY5%S_x45<_0Rm|2sa=1=j zS7qvO;Y<18H{)12+0qFolv3Nb_ion8f7{vONwja}LO{?_r>2cZb=$JN@lFz8TE72` z{U?E)owI4bA=DfO@IDo%u4k!LCS4`xe4mX!|Y zarmIIkf&>YYp``})!FF!=i*w{mP*FviQ!>MUOiyQve^*dp%~hGH)?jJH16$HYqRar zGlR117+I$6vZ|UOUxW`^byA(IKX!F?hpa%7uz;-mL25_nDN%%0d7#v?c;E(-(J_e|Q#hB8UNHId~wYr&7lO-njr`5B`o4WL>)<&()`vFr`e_Te|3U<1Omns}2u5b-QYBfBOOhh;gS{W!9#!R+)Vcln=`1p{ogE?fOm2o zb9r!M?dwoBJJm8AV!pdZ&r&{X%o;x0H_Wk77E~xa3A`IDqeRuk@X5}|PTaQ3+Ux1u z#VS@u0oIQUqX2O8j!hSnf(p@-GLg=`E@m85=f2suQsS z83{x-S|jTZ(6BL_u6$6&Q=Ql-iI80hNtjl%r~%#=^3V|8{OS`2oLKeT8(=Q{c3 z=0WBD@XAxik4|Y$nVBIOas;pkQ|e}WZkVGzAURP)BA7Y{lDA)`e-wE0Z*Yt$BxxlKDTLCShmo%zrKu%`Js|Ve1$^wcvK6_)+(2~Y?yE$D=z!I?2JeK zba6-!=T~ElfI)qCuhV7_bcUPOE73gn^NAZVgrK8kJ@ZsI`73WBFzKz(^l>k<5X8ge1d--~LXnb-e*G(C_WVPnADd9hOK_}eLZ#1UiNX^Ns7%uP=@G2L zVM+v5STu3~VJt>2z>uO!wBBpUdti-(KBFzT(zOW2+dO-N%VJbpDUU-BZWgl5@|avR zFPHx&)nvYnUhRy}=#qCik@}*ml8u(B#A`AbOXPaZh%*o_WK^P2*RHx&Bgn1r|}Ar8dk;Uj=)ZY1t)!o~uwy*Q;CTa+~EHRYZFLEYZqMAycBo-0NOv@HwHE)Htd%H_d zCIJ|Q(FjL?7Ki{ycLyFiT$a_X_5 zB%is+)*$z?cgnfxt{gFtf-*$^to}e`i!gdBLb@GA=4Z~Et-IWuzO;}XdJ5!O)=f}R ztcy=e$SZp6eV&ufHzM4AqVdJg^uqIt(fjTB@<;P)Qx%u>-%RMxnGFlwG|IrIiTIJQ zD(`sr*5Rm5d1Lrdqr0X7S)luAQG^TiIU&*`Wo<4(I+()*t&cBZSlrMk6mrF2LkQlPzNR zz&-$&@!jfHCa!88cJ)hy6D&p#O!$0mK(n`TzKLcUj_C$W_Wfs3Z7SIB z`AS87144v~Qu2GYBYcb*Thd}VDE{|_4$?HpQVpruX%yciXQq6H%;_Lq(fJ@2? zWOrUSq-|c>uoD~yq*;d>xme3@!s9gAfrOwE(G?p+T-P&f4vS}VHEFD!_*KDtMxEWN ze1BJn92~rF%UjpvtC_LpKht;qirZkjKkK3`*g0EB+$a|>(-FGRB^N?2GL_cfN}=V~ z1Fy@2b&H(&24aAM-QS&)g>~<%X*SauE@6o(U?ts==I7tSIt^AuGFZyfdmQL>b;~<{ z=g9q*vkTI>-)MQ4uF6faS<&7v_83KZ#=Gae`?}|g!NhXyvDlCuA2!t!yV;N@=DW7H z_${6athB?9MeOtHS<*u`NH_C*ckPv#8bze^Mqd$sYHdETrVx!(HyY5hnekBkH%C@(;VQdgSsk38}1WOdKOGEN%xuI1kwBJlC@)Wr?&|QR2e-d0rqn zSco`QG4}`9@CW#r**a2l1K_q0TFh?88&(p=(=WB-XnJXvaRp5n`AkEcszJ(q8&r(a z66=&m3Nfky;B;BNvUWt2570Gi=?GQtgpjlZ>1g+=|ES_?;atV~ zmZrWLhTXc=^63Kadus|M$pPv66V|wst#?j=x(cP9^ql67?B8#dr*Qssg=sm2iD56K zeSNw^?e#-(@XH|S%liGTSxu$haFYLZ!Q~G`3&u|Z?q;cU<3HI=J?mTY6+`Ib@S;ie3a$vXH zQz)#3&0Ykbjl-*E)J~B{KCt4Euga6{ZW*GEQp^~DT)a5)RE`9!Zlo{qAJPzwc9PDyHiYFlk&PsPE zR(2z`-g2Z}W-j;@Yg4^`D1mD|z}eS#erwl#`~%l_ric)4W6wQM87F-?b|#<0M67vuX+tTV8cuY-~rXPvn+o8*S}iPVdGCTeyfLfXVig;7sz{3yF` z5>5m9%1Si{nO;+CY`(E6%BA0H1_uR4z~n4GU^oM@zcZWf+7C6H$@Bl2p$FGg)SrLfCzp92kj=K>7+;XwaZP|4cF$0Gn>nyDoQfryj#}>L3 z3e0z0z}^^{M2LC?3QbPVdILqPIs}Uif||6LU~N&gs=Q>=*%Hy%X%hAF4YpuVg~v=s z-dAL`jd7|%c)~-uYMVf>V5WhnsNrCtFMv)e3(JT_US<7c`4sWR3RvmnS1hSFqsLjH);Yu*r*Hlqd`zC2xXZtTv^U*h}P-@nOqB!P75ymx5g4< z*hQpkxjIgQy|tl6Rj5Y9cnMJP_cd2{)I4xUr=c(ud&UKysPawujEgAR^7UgKQQ`9Jpv1V;kc09 zq0D>g3j5_JN=8`ROY*A1hOODaA_0BX@Z(@2)Swf=EXg$6tXVC^wY1uPy=g0n;O2Je*w+5Edae?ByLaVuZ!k2otKda5jtdn+X?cq<|eiWM(KXXAGW87M(aw@Ougjp zlG{_i=^l1kOniJO^X<+T7K~Rf6xNqoR=%YzT91fJ^Mmqv#b%3nYD!a1-TXzUi)w^q z*?DnT#RYZM#q|m{1VnYn;g59dcTZb50Az#6{wIs<|6-7iy5&L(C93Cys~EMLi3;3} zJ#xCk>vZklB^NsbR)>z@glwhvt!=RM3@7R0wVS2lp6hMX?AdG*nf$0$Z%d>7f6k}- zH+*FE0V6>?I%?>3>x9HelWpye3BMaE7?4O3B9;=9tK{& z0K7h~+U#qibdX^I7Wt{aade%QD!_JtI=VEj2!`W6ebj~TtM61xgmpzxdHX7Pbavk; zq7y-vQPV~mM_$v9(q=6e21 SuU#L3fZ3*j{Aa#@p8gN?P+2hm literal 0 HcmV?d00001 diff --git a/01-bmpmafia/include/bmp.hpp b/01-bmpmafia/include/bmp.hpp index be62045..8ee6daf 100644 --- a/01-bmpmafia/include/bmp.hpp +++ b/01-bmpmafia/include/bmp.hpp @@ -25,7 +25,15 @@ namespace bmp { uint32_t colorsUsed; uint32_t colorsImportant; }; + + struct BMPColorHeader { + uint32_t red; + uint32_t green; + uint32_t blue; + uint32_t alpha; + uint32_t colorSpaceType; + uint32_t unused[16]; +}; } #pragma pack(pop) #endif - diff --git a/01-bmpmafia/include/rainbow.hpp b/01-bmpmafia/include/rainbow.hpp new file mode 100644 index 0000000..7dcfdf5 --- /dev/null +++ b/01-bmpmafia/include/rainbow.hpp @@ -0,0 +1,24 @@ +#ifndef RAINBOW_HPP +#define RAINBOW_HPP +#include + +namespace rainbow { + void print(std::ostream & out, std::string s) { + std::string colors[7] = { + "\033[38;2;210;15;57m", + "\033[38;2;254;100;11m", + "\033[38;2;223;142;29m", + "\033[38;2;64;160;43m", + "\033[38;2;4;165;229m", + "\033[38;2;30;102;245m", + "\033[38;2;136;57;239m" + }; + + for (int i = 0; i < s.length(); i++) + { + out << colors[i % 7] << s[i] << "\033[0m"; + } + } +} +#endif + diff --git a/01-bmpmafia/src/deepfryer/main.cpp b/01-bmpmafia/src/deepfryer/main.cpp new file mode 100644 index 0000000..634bb50 --- /dev/null +++ b/01-bmpmafia/src/deepfryer/main.cpp @@ -0,0 +1,117 @@ +#include "../../include/bmp.hpp" +#include "../../include/rainbow.hpp" +#include +#include +#include +#include + +int main(int argc, char *argv[]) { + std::cout << "๐Ÿณ "; + rainbow::print(std::cout, "deepfryer"); + std::cout << "\n"; + + if (argc < 4) { + std::cerr << "๐Ÿšฌ " << argc << " args? we must have more!!\n"; + std::cerr << "usage:\n"; + std::cerr << "nerdybmp \n"; + return 1; + } + + int threshold = 127; + + try { + threshold = std::stoi(argv[3]); + } catch (std::invalid_argument const &ex) { + std::cerr << "๐Ÿ’€ thats not the threshold.. even not a number.... ok bye\n"; + return 1; + } + + if (threshold > 256 || threshold < 0) { + std::cerr << "๐Ÿ’€ thats not a valid threshold.. ok bye\n"; + return 1; + } + + std::ifstream inputFile(argv[1], std::ios_base::binary); + if (!inputFile) { + std::cerr << "๐Ÿ’€ unable to read the file.. ok bye\n"; + return 1; + } + + bmp::FileHeader fileHeader; + inputFile.read((char *)&fileHeader, sizeof(fileHeader)); + + if (fileHeader.type != 0x4D42) { + std::cerr << "๐Ÿ’€ we are not cooking: this is NOT a BMP file...\n"; + return 1; + } + + bmp::InfoHeader infoHeader; + inputFile.read((char *)&infoHeader, sizeof(infoHeader)); + + std::cout << "๐Ÿ“‚ opened " << argv[1] << '\n'; + + std::ofstream outputFile(argv[2], std::ios_base::binary); + if (!outputFile) { + std::cerr << "๐Ÿ’€ unable to create the output file.. ok bye\n"; + return 1; + } + + std::cout << "๐Ÿงจ heating up the "; + rainbow::print(std::cout, "fryer"); + std::cout << " up to " << threshold << "ยฐ...\n"; + + inputFile.seekg(infoHeader.size + sizeof(bmp::FileHeader), std::ios::beg); + + int rowSize = (infoHeader.width * infoHeader.bitCount / 8 + 3) & ~3; + int paddingSize = rowSize - (infoHeader.width * infoHeader.bitCount / 8); + std::vector row(rowSize); + + bmp::FileHeader outFileHeader; + outFileHeader.type = 0x4D42; + outFileHeader.size = sizeof(bmp::FileHeader) + sizeof(bmp::InfoHeader) + + rowSize * infoHeader.height; + outFileHeader.reserved1 = 0; + outFileHeader.reserved2 = 0; + outFileHeader.offBits = sizeof(bmp::FileHeader) + sizeof(bmp::InfoHeader); + + outputFile.write((char *)&fileHeader, sizeof(fileHeader)); + outputFile.write((char *)&infoHeader, sizeof(infoHeader)); + + std::cout << "๐Ÿพ THE "; + rainbow::print(std::cout, "DEEPFRYER"); + std::cout << " IS READY FOR COOKING ๐Ÿ”ฅ\n"; + + for (int y = 0; y < infoHeader.height; ++y) { + inputFile.read((char *)row.data(), rowSize); + + for (int x = 0; x < infoHeader.width; ++x) { + uint8_t blue = row[x * 3]; + uint8_t green = row[x * 3 + 1]; + uint8_t red = row[x * 3 + 2]; + + uint8_t gray = + static_cast(0.299 * red + 0.587 * green + 0.114 * blue); + + uint8_t binaryColor = (gray < threshold) ? 0 : 255; + + row[x * 3] = binaryColor; + row[x * 3 + 1] = binaryColor; + row[x * 3 + 2] = binaryColor; + } + + outputFile.write((char *)row.data(), rowSize); + } + + std::cout << "๐Ÿ— your pic is ready, turning off the "; + rainbow::print(std::cout, "fryer"); + std::cout << "...\n"; + + std::vector padding(paddingSize, 0); + outputFile.write((char *)padding.data(), paddingSize); + + std::cout << "โœ… take your " << argv[2] << " .. bone apple teeth\n"; + + inputFile.close(); + outputFile.close(); + return 0; +}