Dependencies:   mbed FATFileSystem

Committer:
rottenegg
Date:
Thu Apr 18 19:47:30 2019 +0000
Revision:
2:964e19f2f3f1
Parent:
1:0efd25071a6d
Child:
3:63cdd5cab431
Documented the N5110-Modded and added the WDplayer, a Library that plays 8-Bit Mono-stereo .wav files - However, it has problems running alongside as a Ticker event.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rottenegg 1:0efd25071a6d 1 #include "Bitmap.h"
rottenegg 1:0efd25071a6d 2
rottenegg 2:964e19f2f3f1 3 //Total New Process time = 0.04 Seconds (still a bit long)
rottenegg 2:964e19f2f3f1 4 //Image data is Stored in DWORDS (32-bits) not Bytes (8-bits)
rottenegg 2:964e19f2f3f1 5
rottenegg 1:0efd25071a6d 6 void Bitmap::renderBMP(const char *path, N5110 &lcd, unsigned int const x, unsigned int const y) {
rottenegg 2:964e19f2f3f1 7 //Opening File and Checking
rottenegg 1:0efd25071a6d 8 FILE *bmp = fopen(path,"r");
rottenegg 1:0efd25071a6d 9 if (bmp == NULL) {
rottenegg 1:0efd25071a6d 10 std::cerr << "File Not Found" << std::endl;
rottenegg 1:0efd25071a6d 11 }
rottenegg 2:964e19f2f3f1 12 //Creating Buffer and Geting data from Memory locations for RIFF data block
rottenegg 1:0efd25071a6d 13 unsigned char *buffer = (unsigned char*)std::malloc(4 * sizeof(unsigned char));
rottenegg 1:0efd25071a6d 14 unsigned long offbits;
rottenegg 1:0efd25071a6d 15 unsigned long height;
rottenegg 1:0efd25071a6d 16 unsigned long width;
rottenegg 1:0efd25071a6d 17 std::fseek(bmp,10,SEEK_SET);
rottenegg 1:0efd25071a6d 18 std::fread(&offbits,4,1,bmp);
rottenegg 1:0efd25071a6d 19 std::fseek(bmp,18,SEEK_SET);
rottenegg 1:0efd25071a6d 20 std::fread(&width,4,1,bmp);
rottenegg 1:0efd25071a6d 21 std::fseek(bmp,22,SEEK_SET);
rottenegg 1:0efd25071a6d 22 std::fread(&height,4,1,bmp);
rottenegg 2:964e19f2f3f1 23 //Counting DWORDS required per Row of Image
rottenegg 1:0efd25071a6d 24 unsigned short int dcount = (width / 32) + 1;
rottenegg 1:0efd25071a6d 25 fseek(bmp,offbits,SEEK_SET);
rottenegg 1:0efd25071a6d 26 std::bitset<32> bits;
rottenegg 1:0efd25071a6d 27 int row = 0;
rottenegg 1:0efd25071a6d 28 offbits = 0;
rottenegg 1:0efd25071a6d 29 int colomn = 0;
rottenegg 1:0efd25071a6d 30 bool state;
rottenegg 2:964e19f2f3f1 31 //NEW ENGINE CORE
rottenegg 2:964e19f2f3f1 32 //Looping relative to DWORDS to remove packing bits
rottenegg 1:0efd25071a6d 33 for (unsigned int dwcount = 1; dwcount < ((dcount*height) + 1); dwcount++) {
rottenegg 1:0efd25071a6d 34 std::fread(buffer,1,4,bmp);
rottenegg 2:964e19f2f3f1 35 //Endian Swap
rottenegg 1:0efd25071a6d 36 bits = buffer[0];
rottenegg 1:0efd25071a6d 37 bits = (bits << 8) | (std::bitset<32>)buffer[1];
rottenegg 1:0efd25071a6d 38 bits = (bits << 8) | (std::bitset<32>)buffer[2];
rottenegg 1:0efd25071a6d 39 bits = (bits << 8) | (std::bitset<32>)buffer[3];
rottenegg 2:964e19f2f3f1 40 //Bit Loop to print out pixel data but skips the packing bits
rottenegg 2:964e19f2f3f1 41 //Uses two selective For loops
rottenegg 2:964e19f2f3f1 42 //First Loop only reads remaining bits in a DWORD and skips the Packing bits
rottenegg 2:964e19f2f3f1 43 //Second Loop reads the full DWORD
rottenegg 1:0efd25071a6d 44 if (dwcount % dcount == 0) {
rottenegg 1:0efd25071a6d 45 for (offbits = 0; offbits < (width % 32); offbits++){
rottenegg 1:0efd25071a6d 46 if (bits[31 - offbits] == 1) {
rottenegg 1:0efd25071a6d 47 state = false;
rottenegg 1:0efd25071a6d 48 } else {
rottenegg 1:0efd25071a6d 49 state = true;
rottenegg 1:0efd25071a6d 50 }
rottenegg 1:0efd25071a6d 51 lcd.setPixel((colomn + x) ,(row + y),state);
rottenegg 1:0efd25071a6d 52 colomn++;
rottenegg 1:0efd25071a6d 53 }
rottenegg 1:0efd25071a6d 54 row++;
rottenegg 1:0efd25071a6d 55 colomn = 0;
rottenegg 1:0efd25071a6d 56 } else {
rottenegg 1:0efd25071a6d 57 for (offbits = 0; offbits < 32; offbits++) {
rottenegg 1:0efd25071a6d 58 if (bits[31 - offbits] == 1) {
rottenegg 1:0efd25071a6d 59 state = false;
rottenegg 1:0efd25071a6d 60 } else {
rottenegg 1:0efd25071a6d 61 state = true;
rottenegg 1:0efd25071a6d 62 }
rottenegg 1:0efd25071a6d 63 lcd.setPixel((colomn + x) ,(row + y),state);
rottenegg 1:0efd25071a6d 64 colomn++;
rottenegg 1:0efd25071a6d 65 }
rottenegg 1:0efd25071a6d 66 }
rottenegg 1:0efd25071a6d 67 }
rottenegg 1:0efd25071a6d 68 std::fclose(bmp);
rottenegg 1:0efd25071a6d 69 }