From 790f60269af8d4725c69eda1de45da37fa57d851 Mon Sep 17 00:00:00 2001 From: t-moe Date: Sun, 10 May 2015 02:22:17 +0200 Subject: [PATCH] Added bitmap decoding/drawing example --- common/app/screen_filetest.c | 49 ++++++++++++++++++++++++++++++++++- emulator/emulated/cpu.bmp | Bin 0 -> 16522 bytes 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 emulator/emulated/cpu.bmp diff --git a/common/app/screen_filetest.c b/common/app/screen_filetest.c index b381c48..61767f2 100644 --- a/common/app/screen_filetest.c +++ b/common/app/screen_filetest.c @@ -12,6 +12,9 @@ static void b_back_cb(void* button) { gui_screen_back(); } + +static void image_test(); + static void enter(void* screen) { tft_clear(HEX(0xBABECD)); @@ -103,7 +106,8 @@ static void enter(void* screen) { } filesystem_file_close(file); - + + image_test(); } static void leave(void* screen) { @@ -125,4 +129,47 @@ SCREEN_STRUCT* get_screen_filetest() { return &screen; } +static void image_test() { + //Source: http://stackoverflow.com/a/17040962/2606757 + FILE_HANDLE* file = filesystem_file_open("cpu.bmp"); + if(file==NULL) { + tft_print_line(10,180,BLUE,TRANSPARENT,0,"Could not open cpu.bmp"); + return; + } + + + unsigned char info[54]; + if(filesystem_file_read(file,info,54)!=F_OK) { + tft_print_line(10,180,BLUE,TRANSPARENT,0,"Could not read header of cpu.bmp"); + filesystem_file_close(file); + return; + } + + // extract image height and width from header + int width = *(int*)&info[18]; + int height = *(int*)&info[22]; + + filesystem_file_seek(file,*(int*)&info[10]); + + unsigned char data [width*4]; + tft_draw_rectangle(100-1,160-1,100-1+width,160-1+height,BLACK); + + for(int i = 0; i < height; i++) + { + filesystem_file_read(file,data,width*4); + for(int j = 0; j < width*4; j += 4) + { + unsigned char a = data[j]; + unsigned char r = data[j+1]; + unsigned char g = data[j+2]; + unsigned char b = data[j+3]; + if(a!=0) { + tft_draw_pixel(100+j/4,160+height-1-i,RGB(r,g,b)); + } + } + } + + filesystem_file_close(file); + +} diff --git a/emulator/emulated/cpu.bmp b/emulator/emulated/cpu.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d863e3ed860dec6db784eefd209257e42d5fcee6 GIT binary patch literal 16522 zcmeHOO^g&p6dnZe2mcb{9~wo2hWHbs_%F(e2TlBm8i<7L?pcZ1g9*VzZjua%>~znv z2&)`e=;_%&V#taKUKA4&jYlse9@K*gQKKF_xR`*-isScH_Z!|c)8i1PciL$tTU#~t zy1MFnRrTuCdv8`gKRQq_pHckZgftMPIfccAxhS(@;es&nYxt=b3gI8W)>l6L@|&B# zIKFh~&`nn_9{F|7z_MivHxCcrJ}^8ye{y2tlI53vGk1x#{l2KN$>!-V=TM%ST0J-L z?DvDR^(XS_pklwSU$@6|9`rryXy7?BzH1%vx30Ze(@{U>mz@)VXB`j9j;m=^_tjhd zvi+55TeiLnDuYcJ0@vB#d(JWTU3Hzk^?G5BZa*94np+&e`0A2?^$+qy`o{PU3N6Yx z)#ih?i(|C<lW2K zYmH8&Qt1NWKlg{G`4#(qp-p(hS85u|c;Dqh56VLiXgYYkLTIJZig}u5%A>{Wgnm9x zp93|o_%LMDTiBuk@+nrnG(_cHC>YF)#za6Z!DK@xW8 zGY=WPSJqySa_H8-$=TX%9%LQ6$lNq|K%H9TyjfS#n$OC-3wFud@u1z=NS%%P74=!B zTBJ+iy(M{f;M!}s$FhoD#;JKgnJD$t4?-ESZjs>hUFQj6#~kmM=a}QJwaQ?1?aflp zJIAgqgV$$azss1Ca`J#Ok>^t58R%)mL|wU2N36IzW1XLBs!PD%>dvOyWvOh=qYm)X ze!zRX9(&UK_alC+{bRts5otzvkQ@B8p}>yBeLeIH4 zT&FzY2ksfn|F?O?Z+tA3q1&L}j~kmi?Cz6paaq6ae-`< zs_#VpLwEk6Ix=|2#KiE0)Gc%h{Z!^`nb!Mj(sS+{A76iwu1hLojy~J%4c@5VD`oZ> zxI=fN?a%S{N&0^)oUCIXV#5+YL?`&MZvwWjRf+E9$H07i*ua`Le)`_k z-H-it3x5McOuq={A2ui4uXL)p_Ifj)u)8(dri>rD;0fS;x6xl0@nhe=4Xls(p8chM zf4lWh{IumZo=+J+`Z0TG_g3o`u05uGrNJvWj!xtscvt1KwTks3-nCOF%0$wzzdml@ ziS{P%*jVS2I^hoT4xbNgjFC>-W&HFz3r_Am_LubO2!Gl6eoxt2(klLhbye58hxWKQ z{-i!(w_AXI-)lVIW&BC~wyN(0e`B1nJ>Kj3B>CS8C)Ym4JI1q&$#?C0`CLEZr)&|N zz&y&BES!N~>-jnx`LEk$shl+b@$(;h^GJN$dBP9uxc}NeX&&SWKlHPsxC1`|J^mx? z_rpxE2|eDg`=2pcf)lp?gYEo+{V4xh$^WFfJmIH4#@J0JiQ(%<{KO_W#m|F#^#=L@ zMF!?Y{+YWe>Ip_=mFfyM8vCWqaDhrFG)}$L|-6 z?BluEF8(Eo{V}>irg>mb^Zv{;jj>=dKd?od5&uG6KxAO6Gmv_avW?A%T*xjDPGe_$ zBIKHhhhz+w*kW7ZY*z>S#7qAV9wcLD3|~8p|3%9_57NUfyh-8#Wun-VdX;kw9A|vZ zpXYkQef)}@6#>pYkZ?7{7?~3t`SWWyE1u2AB(23EPiLw8H3SG4`Z@OV;{{lXBG8b z(q{8ReK{`c&j0>1Kfiy)IrF5Rf68C_`(+K%rmE>E8($;ok+{A3J9qVW*5krc literal 0 HcmV?d00001