diff options
| author | Loic Guegan <manzerbredes@mailbox.org> | 2021-04-30 09:31:30 +0200 |
|---|---|---|
| committer | Loic Guegan <manzerbredes@mailbox.org> | 2021-04-30 09:31:30 +0200 |
| commit | 66f2ca62469eba4b46e1f19f54dde9476b08d956 (patch) | |
| tree | 0a419a62a6af21c593e9f6b0d632b5953bc58721 /src/drivers/bmp.cc | |
| parent | 717556178c2017e374ee1108e6b25a24507a1dde (diff) | |
Debug interrupts, allow to show bmp images
Diffstat (limited to 'src/drivers/bmp.cc')
| -rw-r--r-- | src/drivers/bmp.cc | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/drivers/bmp.cc b/src/drivers/bmp.cc new file mode 100644 index 0000000..6f9dad6 --- /dev/null +++ b/src/drivers/bmp.cc @@ -0,0 +1,39 @@ +#include "bmp.hpp" +#include "libs/string.hpp" + +#include "drivers/framebuffer.hpp" + +void bmp_draw(u8* bmp_data, int posx, int posy){ + BMP_HEADER header; + memcpy(bmp_data, &header, sizeof(BMP_HEADER)); + if(header.signature!=0x4d42){ + printk("Invalid BMP data\n"); + return; + } + + // Do not forget, each row is 32bits aligned + u32 Bpp=header.bpp/8; + u32 lineW=header.width*Bpp; + while((lineW&0x3)!=0){ + lineW++; + } + + for(u32 y=0;y<header.height;y++){ + for(u32 x=0;x<header.width;x++){ + u32 pos=x*Bpp+y*lineW; + u8 *pixel=((u8*)bmp_data)+header.data_offset+pos; + FB_PIXEL p; + p.x=posx+x; + p.y=posy+(header.height-y); + p.r=pixel[0]; + p.g=pixel[1]; + p.b=pixel[2]; + //printk("R%d G%d B%d\n",p.r,p.g,p.b); + p.a=0; + framebuffer_draw(p); + + } + + } + +}
\ No newline at end of file |
