[6348] | 1 | |
---|
| 2 | #include <SDL/SDL.h> |
---|
| 3 | #include <SDL/SDL_ttf.h> |
---|
[7218] | 4 | #include <string> |
---|
[6348] | 5 | |
---|
| 6 | |
---|
| 7 | TTF_Font* fontTTF = NULL; |
---|
| 8 | |
---|
| 9 | int getMaxHeight() |
---|
| 10 | { |
---|
| 11 | if (fontTTF != NULL) |
---|
| 12 | return TTF_FontHeight(fontTTF); |
---|
| 13 | else |
---|
| 14 | return 0; |
---|
| 15 | } |
---|
| 16 | |
---|
| 17 | |
---|
[7218] | 18 | void createAsciiImage(const std::string& fileName, unsigned int size) |
---|
[6348] | 19 | { |
---|
| 20 | if (fontTTF == NULL) |
---|
| 21 | return; |
---|
| 22 | int height = getMaxHeight(); |
---|
| 23 | |
---|
| 24 | // |
---|
| 25 | SDL_Color tmpColor = {0, 0, 0}; |
---|
| 26 | // Surface definition. |
---|
| 27 | SDL_Rect tmpRect; // this represents a Rectangle for blitting. |
---|
| 28 | SDL_Surface* tmpSurf = SDL_CreateRGBSurface(SDL_SWSURFACE, |
---|
| 29 | height*16, height*16, |
---|
| 30 | 32, |
---|
| 31 | #if SDL_BYTEORDER == SDL_LIL_ENDIAN /* OpenGL RGBA masks */ |
---|
| 32 | 0x000000FF, |
---|
| 33 | 0x0000FF00, |
---|
| 34 | 0x00FF0000, |
---|
| 35 | 0xFF000000 |
---|
| 36 | #else |
---|
| 37 | 0xFF000000, |
---|
| 38 | 0x00FF0000, |
---|
| 39 | 0x0000FF00, |
---|
| 40 | 0x000000FF |
---|
| 41 | #endif |
---|
| 42 | ); |
---|
| 43 | tmpRect.x = 0; tmpRect.y = 0; tmpRect.w = tmpSurf->w; tmpRect.h = tmpSurf->h; |
---|
| 44 | SDL_SetClipRect(tmpSurf, &tmpRect); |
---|
| 45 | int maxLineHeight = 0; |
---|
| 46 | |
---|
| 47 | int posX, posY; |
---|
| 48 | // all the interessting Glyphs |
---|
| 49 | for (posY = 0; posY < 16; posY++) |
---|
| 50 | { |
---|
| 51 | for (posX = 0; posX < 16; posX++) |
---|
| 52 | { |
---|
| 53 | SDL_Surface* glyphSurf = NULL; |
---|
| 54 | if (fontTTF != NULL) |
---|
| 55 | { |
---|
| 56 | SDL_Color white = {255, 255, 255}; |
---|
| 57 | glyphSurf = TTF_RenderGlyph_Blended(fontTTF, posX+16*posY, white); |
---|
| 58 | } |
---|
| 59 | if( glyphSurf != NULL ) |
---|
| 60 | { |
---|
| 61 | tmpRect.x = height*posX; |
---|
| 62 | tmpRect.y = height*posY; |
---|
| 63 | SDL_SetAlpha(glyphSurf, 0, 0); |
---|
| 64 | |
---|
| 65 | SDL_BlitSurface(glyphSurf, NULL, tmpSurf, &tmpRect); |
---|
| 66 | SDL_FreeSurface(glyphSurf); |
---|
| 67 | } |
---|
| 68 | } |
---|
| 69 | } |
---|
[7218] | 70 | SDL_SaveBMP(tmpSurf, fileName.c_str()); |
---|
[6348] | 71 | SDL_FreeSurface(tmpSurf); |
---|
| 72 | } |
---|
| 73 | |
---|
| 74 | |
---|
| 75 | |
---|
| 76 | int main (int argc, const char** argv) |
---|
| 77 | { |
---|
| 78 | SDL_Init(0); |
---|
| 79 | TTF_Init(); |
---|
| 80 | unsigned int renderSize = 32; |
---|
| 81 | |
---|
| 82 | fontTTF = TTF_OpenFont(argv[1], renderSize); |
---|
[7218] | 83 | |
---|
[6348] | 84 | createAsciiImage(argv[2], renderSize); |
---|
[7218] | 85 | |
---|
[6348] | 86 | // delete fontTTF; |
---|
| 87 | TTF_Quit(); |
---|
| 88 | SDL_Quit(); |
---|
| 89 | } |
---|