Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: BD_SD_DISCO_F769NI BSP_DISCO_F769NI LCD_DISCO_F769NI TS_DISCO_F769NI USBHost_F769NI
zz_common/draw_bitmap.cpp@3:35ac9ee7d2d6, 2019-08-07 (annotated)
- Committer:
- kenjiArai
- Date:
- Wed Aug 07 05:39:01 2019 +0000
- Revision:
- 3:35ac9ee7d2d6
1st trial revision (Not finalized yet)
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| kenjiArai | 3:35ac9ee7d2d6 | 1 | // https://os.mbed.com/users/okano/code/bmp_8bit_per_pixel_format/ |
| kenjiArai | 3:35ac9ee7d2d6 | 2 | |
| kenjiArai | 3:35ac9ee7d2d6 | 3 | #if 0 |
| kenjiArai | 3:35ac9ee7d2d6 | 4 | |
| kenjiArai | 3:35ac9ee7d2d6 | 5 | #include "mbed.h" // for mbed |
| kenjiArai | 3:35ac9ee7d2d6 | 6 | LocalFileSystem local("local"); // for mbed to access local file system |
| kenjiArai | 3:35ac9ee7d2d6 | 7 | |
| kenjiArai | 3:35ac9ee7d2d6 | 8 | /* |
| kenjiArai | 3:35ac9ee7d2d6 | 9 | * |
| kenjiArai | 3:35ac9ee7d2d6 | 10 | * BMP file data handler sample |
| kenjiArai | 3:35ac9ee7d2d6 | 11 | * |
| kenjiArai | 3:35ac9ee7d2d6 | 12 | * reference : http://www.umekkii.jp/data/computer/file_format/bitmap.cgi |
| kenjiArai | 3:35ac9ee7d2d6 | 13 | * |
| kenjiArai | 3:35ac9ee7d2d6 | 14 | */ |
| kenjiArai | 3:35ac9ee7d2d6 | 15 | |
| kenjiArai | 3:35ac9ee7d2d6 | 16 | #include <stdio.h> |
| kenjiArai | 3:35ac9ee7d2d6 | 17 | |
| kenjiArai | 3:35ac9ee7d2d6 | 18 | //#define SOURCE_FILE "/local/small.bmp" |
| kenjiArai | 3:35ac9ee7d2d6 | 19 | #define SOURCE_FILE "/local/pre4.bmp" |
| kenjiArai | 3:35ac9ee7d2d6 | 20 | //#define SOURCE_FILE "pre_dsp_4.bmp" |
| kenjiArai | 3:35ac9ee7d2d6 | 21 | |
| kenjiArai | 3:35ac9ee7d2d6 | 22 | #define BUFFER_SIZE 1024 |
| kenjiArai | 3:35ac9ee7d2d6 | 23 | |
| kenjiArai | 3:35ac9ee7d2d6 | 24 | typedef struct bmp_header_st { |
| kenjiArai | 3:35ac9ee7d2d6 | 25 | unsigned short bfType __attribute__((packed)); |
| kenjiArai | 3:35ac9ee7d2d6 | 26 | unsigned long bfSize __attribute__((packed)); |
| kenjiArai | 3:35ac9ee7d2d6 | 27 | unsigned short bfReserved1 __attribute__((packed)); |
| kenjiArai | 3:35ac9ee7d2d6 | 28 | unsigned short bfReserved2 __attribute__((packed)); |
| kenjiArai | 3:35ac9ee7d2d6 | 29 | unsigned long bfOffBits __attribute__((packed)); |
| kenjiArai | 3:35ac9ee7d2d6 | 30 | |
| kenjiArai | 3:35ac9ee7d2d6 | 31 | unsigned long biSize __attribute__((packed)); |
| kenjiArai | 3:35ac9ee7d2d6 | 32 | long biWidth __attribute__((packed)); |
| kenjiArai | 3:35ac9ee7d2d6 | 33 | long biHeight __attribute__((packed)); |
| kenjiArai | 3:35ac9ee7d2d6 | 34 | unsigned short biPlanes __attribute__((packed)); |
| kenjiArai | 3:35ac9ee7d2d6 | 35 | unsigned short biBitCount __attribute__((packed)); |
| kenjiArai | 3:35ac9ee7d2d6 | 36 | unsigned long biCompression __attribute__((packed)); |
| kenjiArai | 3:35ac9ee7d2d6 | 37 | unsigned long biSizeImage __attribute__((packed)); |
| kenjiArai | 3:35ac9ee7d2d6 | 38 | long biXPixPerMeter __attribute__((packed)); |
| kenjiArai | 3:35ac9ee7d2d6 | 39 | long biYPixPerMeter __attribute__((packed)); |
| kenjiArai | 3:35ac9ee7d2d6 | 40 | unsigned long biClrUsed __attribute__((packed)); |
| kenjiArai | 3:35ac9ee7d2d6 | 41 | unsigned long biCirImportant __attribute__((packed)); |
| kenjiArai | 3:35ac9ee7d2d6 | 42 | } |
| kenjiArai | 3:35ac9ee7d2d6 | 43 | bmp_header; |
| kenjiArai | 3:35ac9ee7d2d6 | 44 | |
| kenjiArai | 3:35ac9ee7d2d6 | 45 | typedef struct color_palette_st { |
| kenjiArai | 3:35ac9ee7d2d6 | 46 | unsigned char red; |
| kenjiArai | 3:35ac9ee7d2d6 | 47 | unsigned char green; |
| kenjiArai | 3:35ac9ee7d2d6 | 48 | unsigned char blue; |
| kenjiArai | 3:35ac9ee7d2d6 | 49 | unsigned char dummy; |
| kenjiArai | 3:35ac9ee7d2d6 | 50 | } |
| kenjiArai | 3:35ac9ee7d2d6 | 51 | color_palette; |
| kenjiArai | 3:35ac9ee7d2d6 | 52 | |
| kenjiArai | 3:35ac9ee7d2d6 | 53 | |
| kenjiArai | 3:35ac9ee7d2d6 | 54 | int main() { |
| kenjiArai | 3:35ac9ee7d2d6 | 55 | unsigned char buffer[ BUFFER_SIZE ]; |
| kenjiArai | 3:35ac9ee7d2d6 | 56 | FILE *fs; |
| kenjiArai | 3:35ac9ee7d2d6 | 57 | bmp_header bh; |
| kenjiArai | 3:35ac9ee7d2d6 | 58 | color_palette cp[256]; |
| kenjiArai | 3:35ac9ee7d2d6 | 59 | unsigned long readsize; |
| kenjiArai | 3:35ac9ee7d2d6 | 60 | unsigned long i; |
| kenjiArai | 3:35ac9ee7d2d6 | 61 | unsigned long ofset = 0; |
| kenjiArai | 3:35ac9ee7d2d6 | 62 | |
| kenjiArai | 3:35ac9ee7d2d6 | 63 | printf( "BMP file access sample\r\n"); |
| kenjiArai | 3:35ac9ee7d2d6 | 64 | |
| kenjiArai | 3:35ac9ee7d2d6 | 65 | if ( NULL == (fs = fopen( SOURCE_FILE, "rb" )) ) { |
| kenjiArai | 3:35ac9ee7d2d6 | 66 | printf( "file open error when oening file \"%s\"\r\n", SOURCE_FILE ); |
| kenjiArai | 3:35ac9ee7d2d6 | 67 | return ( 1 ); |
| kenjiArai | 3:35ac9ee7d2d6 | 68 | } |
| kenjiArai | 3:35ac9ee7d2d6 | 69 | |
| kenjiArai | 3:35ac9ee7d2d6 | 70 | /* |
| kenjiArai | 3:35ac9ee7d2d6 | 71 | * reading header |
| kenjiArai | 3:35ac9ee7d2d6 | 72 | */ |
| kenjiArai | 3:35ac9ee7d2d6 | 73 | |
| kenjiArai | 3:35ac9ee7d2d6 | 74 | fread( &bh, sizeof( bh ), 1, fs ); |
| kenjiArai | 3:35ac9ee7d2d6 | 75 | |
| kenjiArai | 3:35ac9ee7d2d6 | 76 | printf( " bfType : 0x%04X\r\n", bh.bfType ); |
| kenjiArai | 3:35ac9ee7d2d6 | 77 | printf( " bfSize : %ld\r\n", bh.bfSize ); |
| kenjiArai | 3:35ac9ee7d2d6 | 78 | printf( " bfOffBits : %ld\r\n", bh.bfOffBits ); |
| kenjiArai | 3:35ac9ee7d2d6 | 79 | printf( " biSize : %lu\r\n", bh.biSize ); |
| kenjiArai | 3:35ac9ee7d2d6 | 80 | printf( " biWidth : %ld\r\n", bh.biWidth ); |
| kenjiArai | 3:35ac9ee7d2d6 | 81 | printf( " biHeight : %ld\r\n", bh.biHeight ); |
| kenjiArai | 3:35ac9ee7d2d6 | 82 | printf( " biPlanes : %d\r\n", bh.biPlanes ); |
| kenjiArai | 3:35ac9ee7d2d6 | 83 | printf( " biBitCount : %d\r\n", bh.biBitCount ); |
| kenjiArai | 3:35ac9ee7d2d6 | 84 | printf( " biCompression : %lu\r\n", bh.biCompression ); |
| kenjiArai | 3:35ac9ee7d2d6 | 85 | printf( " biSizeImage : %lu\r\n", bh.biSizeImage ); |
| kenjiArai | 3:35ac9ee7d2d6 | 86 | printf( " biXPixPerMeter : %ld\r\n", bh.biXPixPerMeter ); |
| kenjiArai | 3:35ac9ee7d2d6 | 87 | printf( " biYPixPerMeter : %ld\r\n", bh.biYPixPerMeter ); |
| kenjiArai | 3:35ac9ee7d2d6 | 88 | printf( " biClrUsed : %lu\r\n", bh.biClrUsed ); |
| kenjiArai | 3:35ac9ee7d2d6 | 89 | printf( " biCirImportant : %lu\r\n", bh.biCirImportant ); |
| kenjiArai | 3:35ac9ee7d2d6 | 90 | |
| kenjiArai | 3:35ac9ee7d2d6 | 91 | /* |
| kenjiArai | 3:35ac9ee7d2d6 | 92 | * checking header |
| kenjiArai | 3:35ac9ee7d2d6 | 93 | */ |
| kenjiArai | 3:35ac9ee7d2d6 | 94 | |
| kenjiArai | 3:35ac9ee7d2d6 | 95 | if ( (bh.bfType != 0x4D42) |
| kenjiArai | 3:35ac9ee7d2d6 | 96 | || (bh.bfOffBits != 54 + 256 * sizeof( color_palette ) ) |
| kenjiArai | 3:35ac9ee7d2d6 | 97 | || (bh.biBitCount != 8) |
| kenjiArai | 3:35ac9ee7d2d6 | 98 | || (bh.biCompression != 0) |
| kenjiArai | 3:35ac9ee7d2d6 | 99 | ) { |
| kenjiArai | 3:35ac9ee7d2d6 | 100 | printf( "unsupported file format\r\n" ); |
| kenjiArai | 3:35ac9ee7d2d6 | 101 | return ( 1 ); |
| kenjiArai | 3:35ac9ee7d2d6 | 102 | } |
| kenjiArai | 3:35ac9ee7d2d6 | 103 | |
| kenjiArai | 3:35ac9ee7d2d6 | 104 | /* |
| kenjiArai | 3:35ac9ee7d2d6 | 105 | * header information |
| kenjiArai | 3:35ac9ee7d2d6 | 106 | */ |
| kenjiArai | 3:35ac9ee7d2d6 | 107 | |
| kenjiArai | 3:35ac9ee7d2d6 | 108 | printf( "header read, the image data size is %lu bytes\r\n", bh.bfSize ); |
| kenjiArai | 3:35ac9ee7d2d6 | 109 | printf( " the image data size is %lu bytes\r\n", bh.biSizeImage ); |
| kenjiArai | 3:35ac9ee7d2d6 | 110 | printf( " horizontal size %lu pixels\r\n", bh.biWidth ); |
| kenjiArai | 3:35ac9ee7d2d6 | 111 | printf( " vertical size %lu pixels\r\n", bh.biHeight ); |
| kenjiArai | 3:35ac9ee7d2d6 | 112 | |
| kenjiArai | 3:35ac9ee7d2d6 | 113 | /* |
| kenjiArai | 3:35ac9ee7d2d6 | 114 | * read color palette |
| kenjiArai | 3:35ac9ee7d2d6 | 115 | */ |
| kenjiArai | 3:35ac9ee7d2d6 | 116 | |
| kenjiArai | 3:35ac9ee7d2d6 | 117 | for ( i = 0; i < 256; i++ ) { |
| kenjiArai | 3:35ac9ee7d2d6 | 118 | fread( &(cp[i]), sizeof( color_palette ), 1, fs ); |
| kenjiArai | 3:35ac9ee7d2d6 | 119 | // printf( "cp 0x%02X : 0x%02X - 0x%02X - 0x%02X\r\n", i, (cp[i]).red, (cp[i]).green, (cp[i]).blue ); |
| kenjiArai | 3:35ac9ee7d2d6 | 120 | } |
| kenjiArai | 3:35ac9ee7d2d6 | 121 | |
| kenjiArai | 3:35ac9ee7d2d6 | 122 | |
| kenjiArai | 3:35ac9ee7d2d6 | 123 | while ( 0 != (readsize = fread( buffer, sizeof( unsigned char ) , BUFFER_SIZE, fs )) ) { |
| kenjiArai | 3:35ac9ee7d2d6 | 124 | for ( i = 0; i < readsize; i++ ) { |
| kenjiArai | 3:35ac9ee7d2d6 | 125 | // printf( " %6lX : 0x%02X, 0x%02X, 0x%02X\r\n", ofset, cp[ buffer[i] ].red, cp[ buffer[i] ].green, cp[ buffer[i] ].blue ); |
| kenjiArai | 3:35ac9ee7d2d6 | 126 | ofset++; |
| kenjiArai | 3:35ac9ee7d2d6 | 127 | } |
| kenjiArai | 3:35ac9ee7d2d6 | 128 | } |
| kenjiArai | 3:35ac9ee7d2d6 | 129 | |
| kenjiArai | 3:35ac9ee7d2d6 | 130 | printf( "done.\r\n\r\n" ); |
| kenjiArai | 3:35ac9ee7d2d6 | 131 | } |
| kenjiArai | 3:35ac9ee7d2d6 | 132 | |
| kenjiArai | 3:35ac9ee7d2d6 | 133 | #endif |