Om du ska ha skalbara teckensnitt bör du adaptera TTF-sättet: alla tecken är grafisk beskrivit som kurvor, streck och fyllnad. Blir ganska mycket jobb men sedan kan du göra vad du vill.
Men oftast är det ju frågan om att du vill placera tecken av fasta storlekar, möjligen fler olika storlekar men likaväl fasta. Då kan man göra en tabell. Jag har gjort såhär: (lite avkortat)
Kod: Markera allt
typedef struct
{
unsigned char Length;
unsigned char Data[5];
} T_CHARDEF_05x08;
#define Pattern_032 {2, 0x00, 0x00, 0x00, 0x00, 0x00} /* ASCII 0032 ' ' */
#define Pattern_033 {1, 0x7D, 0x00, 0x00, 0x00, 0x00} /* ASCII 0033 '!' */
#define Pattern_034 {3, 0x30, 0x00, 0x30, 0x00, 0x00} /* ASCII 0034 '"' */
#define Pattern_035 {5, 0x14, 0x3E, 0x14, 0x3E, 0x14} /* ASCII 0035 '#' */
#define Pattern_036 {5, 0x12, 0x2A, 0x7F, 0x2A, 0x24} /* ASCII 0036 '$' */
#define Pattern_037 {5, 0x22, 0x04, 0x08, 0x10, 0x22} /* ASCII 0037 '%' */
#define Pattern_038 {5, 0x36, 0x49, 0x35, 0x02, 0x05} /* ASCII 0038 '&' */
#define Pattern_039 {1, 0x60, 0x00, 0x00, 0x00, 0x00} /* ASCII 0039 ''' */
#define Pattern_040 {3, 0x1C, 0x22, 0x41, 0x00, 0x00} /* ASCII 0040 '(' */
#define Pattern_041 {3, 0x41, 0x22, 0x1C, 0x00, 0x00} /* ASCII 0041 ')' */
#define Pattern_042 {5, 0x2A, 0x1C, 0x08, 0x1C, 0x2A} /* ASCII 0042 '*' */
#define Pattern_043 {5, 0x08, 0x08, 0x3E, 0x08, 0x08} /* ASCII 0043 '+' */
#define Pattern_044 {2, 0x01, 0x02, 0x00, 0x00, 0x00} /* ASCII 0044 ',' */
#define Pattern_045 {3, 0x08, 0x08, 0x08, 0x08, 0x08} /* ASCII 0045 '-' */
#define Pattern_046 {1, 0x01, 0x00, 0x00, 0x00, 0x00} /* ASCII 0046 '.' */
#define Pattern_047 {5, 0x02, 0x04, 0x08, 0x10, 0x20} /* ASCII 0047 '/' */
#define Pattern_048 {5, 0x3E, 0x41, 0x41, 0x41, 0x3E} /* ASCII 0048 '0' */
#define Pattern_049 {3, 0x21, 0x7F, 0x01, 0x00, 0x00} /* ASCII 0049 '1' */
#define Pattern_050 {5, 0x21, 0x43, 0x45, 0x49, 0x31} /* ASCII 0050 '2' */
#define Pattern_051 {5, 0x22, 0x41, 0x49, 0x49, 0x36} /* ASCII 0051 '3' */
#define Pattern_052 {5, 0x0C, 0x14, 0x24, 0x7F, 0x04} /* ASCII 0052 '4' */
#define Pattern_053 {5, 0x72, 0x51, 0x51, 0x51, 0x4E} /* ASCII 0053 '5' */
#define Pattern_054 {5, 0x1E, 0x29, 0x49, 0x49, 0x06} /* ASCII 0054 '6' */
#define Pattern_055 {5, 0x40, 0x47, 0x48, 0x50, 0x60} /* ASCII 0055 '7' */
#define Pattern_056 {5, 0x36, 0x49, 0x49, 0x49, 0x36} /* ASCII 0056 '8' */
#define Pattern_057 {5, 0x30, 0x49, 0x49, 0x4A, 0x3C} /* ASCII 0057 '9' */
#define Pattern_058 {1, 0x12, 0x00, 0x00, 0x00, 0x00} /* ASCII 0058 ':' */
#define Pattern_059 {2, 0x01, 0x12, 0x00, 0x00, 0x00} /* ASCII 0059 ';' */
#define Pattern_060 {3, 0x08, 0x14, 0x22, 0x00, 0x00} /* ASCII 0060 '<' */
#define Pattern_061 {5, 0x14, 0x14, 0x14, 0x14, 0x14} /* ASCII 0061 '=' */
#define Pattern_062 {3, 0x22, 0x14, 0x08, 0x00, 0x00} /* ASCII 0062 '>' */
#define Pattern_063 {5, 0x20, 0x40, 0x45, 0x48, 0x30} /* ASCII 0063 '?' */
#define Pattern_064 {5, 0x3E, 0x41, 0x5D, 0x55, 0x3D} /* ASCII 0064 '@' */
#define Pattern_065 {5, 0x3F, 0x48, 0x48, 0x48, 0x3F} /* ASCII 0065 'A' */
#define Pattern_066 {5, 0x7F, 0x49, 0x49, 0x49, 0x36} /* ASCII 0066 'B' */
#define Pattern_067 {5, 0x3E, 0x41, 0x41, 0x41, 0x22} /* ASCII 0067 'C' */
... går från Pattern_000 till Pattern_255
const T_CHARDEF_05x08 Char_Tabel_05x08[] = {
Pattern_000,
Pattern_001,
Pattern_002,
Pattern_003,
Pattern_004,
Pattern_005,
Pattern_006,
Pattern_007,
Pattern_008,
Pattern_009,
Pattern_010,
Pattern_011,
Pattern_012,
Pattern_013,
Pattern_014,
Pattern_015,
Pattern_016,
Pattern_017,
Pattern_018,
Pattern_019,
Pattern_020,
Pattern_021,
Pattern_022,
Pattern_023,
Pattern_024,
Pattern_025,
Pattern_026,
Pattern_027,
Pattern_028,
Pattern_029,
Pattern_030,
Pattern_031,
Pattern_032, /* ASCII 0032 ' ' */
Pattern_033, /* ASCII 0033 '!' */
Pattern_034, /* ASCII 0034 '"' */
Pattern_035, /* ASCII 0035 '#' */
Pattern_036, /* ASCII 0036 '$' */
Pattern_037, /* ASCII 0037 '%' */
Pattern_038, /* ASCII 0038 '&' */
Pattern_039, /* ASCII 0039 ''' */
Pattern_040, /* ASCII 0040 '(' */
Pattern_041, /* ASCII 0041 ')' */
Pattern_042, /* ASCII 0042 '*' */
Pattern_043, /* ASCII 0043 '+' */
Pattern_044, /* ASCII 0044 ',' */
Pattern_045, /* ASCII 0045 '-' */
Pattern_046, /* ASCII 0046 '.' */
Pattern_047, /* ASCII 0047 '/' */
Pattern_048, /* ASCII 0048 '0' */
Pattern_049, /* ASCII 0049 '1' */
Pattern_050, /* ASCII 0050 '2' */
Pattern_051, /* ASCII 0051 '3' */
Pattern_052, /* ASCII 0052 '4' */
Pattern_053, /* ASCII 0053 '5' */
Pattern_054, /* ASCII 0054 '6' */
Pattern_055, /* ASCII 0055 '7' */
Pattern_056, /* ASCII 0056 '8' */
Pattern_057, /* ASCII 0057 '9' */
Pattern_058, /* ASCII 0058 ':' */
Pattern_059, /* ASCII 0059 ';' */
Pattern_060, /* ASCII 0060 '<' */
Pattern_061, /* ASCII 0061 '=' */
Pattern_062, /* ASCII 0062 '>' */
Pattern_063, /* ASCII 0063 '?' */
Pattern_064, /* ASCII 0064 '@' */
Pattern_065, /* ASCII 0065 'A' */
Pattern_066, /* ASCII 0066 'B' */
Pattern_067, /* ASCII 0067 'C' */
Pattern_068, /* ASCII 0068 'D' */
Pattern_069, /* ASCII 0069 'E' */
Pattern_070, /* ASCII 0070 'F' */
Pattern_071, /* ASCII 0071 'G' */
Pattern_072, /* ASCII 0072 'H' */
Pattern_073, /* ASCII 0073 'I' */
... går vidare till Pattern_255
Jag valde att göra på detta sätt, dels för enklare överblick och dels för att enkelt kunde ersätta definitionerna i ett senare skede, något som har visat sig vara nödvändigt.
Detta ger mig tillgång till de bitmönster som skapar dessa tecken, dom kan jag sedan placera som "sprites" på den grafiska yta med önskat färg om det är en flerfärgskärm. Nu är detta bara en 5*8 matris, man kan såklart enkelt expandera storleken om tecknen är för små men det blir en del pilljobb. Ett "enkelt" sätt kan vara att skriva ut tecknen i ett ritprogram utan vektorer. Når man får tecknen till rätt storlek kan man enkelt se vilka punkter som ska vara på och vilka som ska vara av. Vill man skriva ut med "EXOR"-funktionalitet är det ju fritt fram, precis som andra effekter.
Man kan även skriva ut med olika storlekar och typsnitt om man vill det, det blir ju en del pilljobb till att börja med men när det är avklarat har man såklart dessa värden/tabeller i separata filer till andra framtida projekt.
tecknen, inte avståndet mellan dom. Det avstånd är i vissa projekt fast definierat och i andra variabelt. Likaså är alla tecken inritat proportionellt, vill jag ha fast teckenbredd kan jag helt enkelt centrera tecknet om jag vill, något som jag redan har rutiner för.