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.
bitmap.cpp
00001 #include "bitmap.h " 00002 00003 #define X_MAX 160 00004 #define Y_MAX 32 00005 00006 extern Serial pc(USBTX, USBRX); 00007 00008 bitmapImage::bitmapImage(char *inputFilename) 00009 { 00010 filename = inputFilename; 00011 00012 pc.printf("Opening file %s...", filename); 00013 fp = fopen(filename, "rb"); 00014 if(fp != NULL) 00015 pc.printf(" OK\n\r"); 00016 else { 00017 fclose(fp); 00018 error(""); 00019 } 00020 00021 // check to see if it is a valid bitmap file 00022 if(fgetc(fp)!='B' || fgetc(fp)!='M') 00023 { 00024 fclose(fp); 00025 error(""); 00026 } 00027 00028 //fseek(fp, 0L, SEEK_END); 00029 00030 // Get BMP info 00031 fileInfo.cols = readImageInfo(0x12, 4); 00032 fileInfo.rows = readImageInfo(0x16, 4); 00033 fileSize = readImageInfo(2, 4); 00034 fileInfo.offset = readImageInfo(0x0A, 4); 00035 fileInfo.bitsPP = (uint16_t)readImageInfo(0x1C, 2); 00036 00037 // Print info 00038 pc.printf("\n\rBMP file %s:\n\r", filename); 00039 pc.printf("Width: %d\n\r", fileInfo.cols); 00040 pc.printf("Height: %d\n\r", fileInfo.rows); 00041 pc.printf("File size: %ld\n\r", fileSize); 00042 pc.printf("Offset: %d\n\r", fileInfo.offset); 00043 pc.printf("Bits per pixel: %d\n\r", fileInfo.bitsPP); 00044 //pc.printf("Vector size: %d\n\r", vectorSize); 00045 } 00046 00047 bitmapImage::~bitmapImage() 00048 { 00049 fclose(fp); 00050 } 00051 00052 void bitmapImage::drawImage(gfxLcd *glcd, int xOffset, int yOffset) 00053 { 00054 // Start at beginning of raster data 00055 fseek(fp, fileInfo.offset, SEEK_SET); 00056 int32_t offsettedX, offsettedY; 00057 00058 uint32_t x=0, y=fileInfo.rows-1; 00059 for(uint32_t index=0; index < fileInfo.rows*(fileInfo.cols/8); index++) 00060 { 00061 char c=fgetc(fp); 00062 for(char b=0; b < 8; b++) 00063 { 00064 char mask = 0x80 >> b; 00065 offsettedX = (int32_t)x+xOffset; 00066 offsettedY = (int32_t)y+yOffset; 00067 00068 if((offsettedX <= X_MAX) && (offsettedY <= Y_MAX) && (offsettedX >= 0) && (offsettedY >= 0)) 00069 { 00070 glcd->putPixel(offsettedX, offsettedY, ~c&mask); 00071 } 00072 x++; 00073 00074 if (x == fileInfo.cols) 00075 { 00076 x=0; 00077 y--; 00078 } 00079 if (y == 0) 00080 return; 00081 } 00082 } 00083 } 00084 00085 uint32_t bitmapImage::readImageInfo(long offset, int n) 00086 { 00087 long value = 0L; 00088 char c; 00089 int i; 00090 00091 fseek(fp, offset, SEEK_SET); 00092 00093 for(i=0; i < n; i++) 00094 { 00095 fread(&c, sizeof(char), 1, fp); 00096 /* calculate value based on adding bytes */ 00097 value = (long)(value + (c)*((long)pow((long double)256, (int)(i)))); 00098 } 00099 00100 return value; 00101 }
Generated on Fri Jul 15 2022 12:01:38 by
1.7.2