| 1 |  | 
|---|
| 2 | #include <SDL/SDL.h> | 
|---|
| 3 | #include <SDL/SDL_ttf.h> | 
|---|
| 4 |  | 
|---|
| 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 |  | 
|---|
| 18 | void createAsciiImage(const char* fileName, unsigned int size) | 
|---|
| 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 |   } | 
|---|
| 70 |   SDL_SaveBMP(tmpSurf, fileName); | 
|---|
| 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); | 
|---|
| 83 |    | 
|---|
| 84 |   createAsciiImage(argv[2], renderSize); | 
|---|
| 85 |    | 
|---|
| 86 |   //  delete fontTTF; | 
|---|
| 87 |   TTF_Quit(); | 
|---|
| 88 |   SDL_Quit(); | 
|---|
| 89 | } | 
|---|