RGB24Buffer * BMPLoader::loadRGB(string name) { uint8_t *data = NULL; BMPHeader header; RGB24Buffer *toReturn = NULL; if (parseBMP(name, &header, &data) != 0) goto fail; toReturn = new RGB24Buffer(header.h, header.w); for (unsigned i = 0; i < header.h; i++) { uint8_t *src = &(data[header.lineLength * (header.h - i - 1)]); RGBColor *dest = &toReturn->element(i,0); for (unsigned j = 0; j < header.w; j++) { uint32_t b = src[0]; uint32_t g = src[1]; uint32_t r = src[2]; *dest = RGBColor(r,g,b); src+=3; dest++; } } fail: if (data) delete[] data; return toReturn; }
/// convert bmp with font to a c-header file: int bmp2font(const char *bmpFile, const char *varName, const char *dstFile) { std::vector<std::vector<char> > fontGrid; uint32_t biHeight; //load BMP into a 2D-array: parseBMP(bmpFile, fontGrid, &biHeight); if(fontGrid.size() == 0) return -1; /* //print debug: printf("fontGrid = \n"); for(int y=0; y < 16; y++) { for(int x=0; x< 79; x++) printf("%c", zo[fontGrid[y][x] == '1'] ); printf("\n"); }*/ //get font height: int vStart, vStop; int extent = getVpos(fontGrid, vStart, vStop); printf("font '%s' has vertical range of %i .. %i\n", bmpFile, vStart, vStop); //extract glyphs from bitmap data: font_s fontOut = parseFont( fontGrid, vStart, vStop ); //debug: print glyphs to screen: char testString[] = "ab1"; char buffer[80*32]; memset(buffer, 0, sizeof(buffer) ); int dx = 0; for(int c=0; c < (int)strlen(testString) ; c++) { dx += fontOut.render( buffer + dx, 80-dx-1, 80, testString[c]) + 1; if(dx >= 80) break; } /* printf("\nfontOut '%s' = \n", testString); char zo[] = " #"; for(int y=0; y < 16; y++) { for(int x=0; x< 79; x++) printf("%c", zo[buffer[y*80 + x]] ); printf("\n"); }*/ //print font into a header file: FILE *fh = fopen(dstFile, "w"); //print offset table //int offsets[257]; fprintf(fh,"\nunsigned short %s_offset[] = ", varName); printCinitializer(fh, fontOut.nrGlyphs + 1, fontOut.offset); fprintf(fh,";\n" ); //print raw bitmap data fprintf(fh,"\nchar %s_data[] = ", varName); printCinitializer(fh, fontOut.offset[fontOut.nrGlyphs] , fontOut.data ); fprintf(fh,";\n" ); //print font structure: fprintf(fh,"\nfont_s %s = {%i, %i, %s_offset, %s_data };\n", varName, fontOut.nrGlyphs, fontOut.height, varName, varName ); fclose(fh); return fontOut.nrGlyphs; }