示例#1
0
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;
}
示例#2
0
/// 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;
}