Any changes are to allow conversion to BMP

Dependencies:   BaseJpegDecode Camera_LS_Y201 Motordriver Servo mbed

Fork of Bitmap_copy_copy by Eric Wieser

bmp24.h

Committer:
kylepost3
Date:
2014-04-30
Revision:
1:d721e32cf79c

File content as of revision 1:d721e32cf79c:

#ifndef BMP24_H
#define BMP24_H

#define BMP24_WIDTH  (80) //(16*4)
#define BMP24_HEIGHT (60) //(16*3)

class bmp24 {
    uint8_t m_bitmap[BMP24_WIDTH*BMP24_HEIGHT*3];
public:
    int width;
    int height;

    bmp24() {
        width = BMP24_WIDTH;
        height = BMP24_HEIGHT;
    }
    
    void clear() {
        memset(m_bitmap, 0, sizeof(m_bitmap));
    }
    
    void point(int x, int y, uint8_t* rgb) {
        if (x >= 0 && x < width && y >= 0 && y < height) {
            int pos = y*width*3+x*3;
            m_bitmap[pos++] = rgb[0];
            m_bitmap[pos++] = rgb[1];
            m_bitmap[pos]   = rgb[2];
        }
    }
    
    void LE32write(uint8_t* buf, int value) {
        *buf++ = value & 0xff;
        *buf++ = (value>>8) & 0xff;
        *buf++ = (value>>16) & 0xff;
        *buf   = (value>>24) & 0xff;
    }
    
    bool writeFile(const char *path) {
        FILE *fp = fopen(path, "wb");
        if (fp == NULL) {
            return false;
        }
        uint8_t header[] = {
0x42,0x4d,0x36,0xe1,0x00,0x00,0x00,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x28,0x00,
0x00,0x00,0xa0,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x01,0x00,0x18,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00};
        int file_size = sizeof(header) + sizeof(m_bitmap);
        LE32write(header+2, file_size);
        LE32write(header+18, width);
        LE32write(header+22, height);
        
        fwrite(header, 1, sizeof(header), fp);
        for(int y = height-1; y >=0; y--) {
            for(int x = 0; x < width; x++) {
                fputc(m_bitmap[y*width*3+x*3+2], fp);
                fputc(m_bitmap[y*width*3+x*3+1], fp);
                fputc(m_bitmap[y*width*3+x*3+0], fp);
            }
        }    
        fclose(fp);
        return true;
    }
};

#endif // BMP24_H