Go Down

Topic: Grands Fonts pour petites memoires  (Read 90 times) previous topic - next topic

savoriano

Aug 24, 2019, 05:36 pm Last Edit: Aug 24, 2019, 05:42 pm by savoriano
Pour faire jolie et pour faire patienter le temps que mon ODB fasse son "SETUP", j'ai voulue créer un introduction: l'affichage de la marque suivi du modèle de ma moto.
J'ai utilisé le font par défaut de la librairie ADAFRUIT grandie de 5 ou 6 fois. Si grande c'est pour remplir l'écran dans toute sa largeur.
L'effet obtenu était mauvais: une pixellisation digne d'un Vic20.
J'ai lue le topic du projet de lesept et j'ai eu une idée:
Utiliser un font de SIZE 92 crée par le site que lesept à mentionné.
Après vu la taille du font, je me suis dit que au lieu d'un arduino MEGA 2560 j'aurais du utiliser un UNO, je n'aurais pas pu utiliser un font si grand.
J'ai commencé à étudier le fonctionnement du font et j'ai compris que je pouvais réduire sa taille.
Après quelque heures j'ai réussi à passer de 815Ko à 18K (peut être qu'on peut aller même plus loin) .
Vous me direz: pas possible.
Oui c'est vrais ce n'est pas possible mais pour une utilisation bien spécifique on peut y arriver. Comment?
Ma moto c'est une YAMAHA. Dans le mot je utilise seulement Y A M H en majuscule.
Le reste des caracteres (122) je n'ai pas besoin.
J'ai  viré le superflue.
Comment j'ai viré les caractères.
exemple
Code: [Select]
0x00, // ' '
 0x00,0x03,0xFF,0xFC,0x00,0x07,0xFF,0xF8,0x00,0x0F,0xFF,0xF0,0x00,0x3F,0xFF,0xE0,0x00,0x7F,0xFF,0x80,0x00,0xFF,0xFF,0x00,0x01,0xFF,0xFE,0x00,0x03,0xFF,0xFC,0x00,0x0F,0xFF,0xF0,0x00,0x1F,0xFF,0xE0,0x00,0x3F,0xFF,0xC0,0x00,0x7F,0xFF,0x80,0x00,0xFF,0xFF,0x00,0x03,0xFF,0xFC,0x00,0x07,0xFF,0xF8,0x00,0x0F,0xFF,0xF0,0x00,0x1F,0xFF,0xE0,0x00,0x3F,0xFF,0xC0,0x00,0xFF,0xFF,0x00,0x01,0xFF,0xFE,0x00,0x03,0xFF,0xFC,0x00,0x07,0xFF,0xF8,0x00,0x1F,0xFF,0xE0,0x00,0x3F,0xFF,0xC0,0x00,0x7F,0xFF,0x80,0x00,0xFF,0xFF,0x00,0x01,0xFF,0xFE,0x00,0x03,0xFF,0xF8,0x00,0x0F,0xFF,0xF0,0x00,0x1F,0xFF,0xE0,0x00,0x3F,0xFF,0x80,0x00,0x7F,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xF8,0x00,0x03,0xFF,0xF0,0x00,0x07,0xFF,0xE0,0x00,0x0F,0xFF,0x80,0x00,0x1F,0xFF,0x00,0x00,0x3F,0xFE,0x00,0x00,0xFF,0xF8,0x00,0x01,0xFF,0xF0,0x00,0x03,0xFF,0xE0,0x00,0x07,0xFF,0x80,0x00,0x0F,0xFF,0x00,0x00,0x1F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x01,0xFF,0xFE,0x00,0x03,0xFF,0xFC,0x00,0x07,0xFF,0xF8,0x00,0x1F,0xFF,0xE0,0x00,0x3F,0xFF,0xC0,0x00,0x7F,0xFF,0x80,0x00,0xFF,0xFF,0x00,0x01,0xFF,0xFE,0x00,0x07,0xFF,0xF8,0x00,0x0F,0xFF,0xF0,0x00,0x1F,0xFF,0xE0,0x00,0x3F,0xFF,0xC0,0x00,0x7F,0xFF,0x80,0x01,0xFF,0xFE,0x00,0x03,0xFF,0xFC,0x00,0x00, // '!'
 0x07,0xFE,0x00,0xFF,0xC0,0xFF,0xC0,0x1F,0xF8,0x1F,0xF8,0x03,0xFF,0x07,0xFF,0x00,0xFF,0xE0,0xFF,0xC0,0x1F,0xF8,0x1F,0xF8,0x03,0xFF,0x03,0xFF,0x00,0x7F,0xE0,0x7F,0xE0,0x0F,0xFC,0x1F,0xF8,0x03,0xFF,0x03,0xFF,0x00,0x7F,0xE0,0x7F,0xE0,0x0F,0xFC,0x0F,0xFC,0x01,0xFF,0x81,0xFF,0x80,0x3F,0xF0,0x7F,0xE0,0x0F,0xFC,0x0F,0xFC,0x01,0xFF,0x81,0xFF,0x80,0x3F,0xF0,0x3F,0xF0,0x07,0xFE,0x07,0xFE,0x00,0xFF,0xC1,0xFF,0x80,0x3F,0xF0,0x3F,0xF0,0x07,0xFE,0x07,0xFE,0x00,0xFF,0xC0,0xFF,0xC0,0x1F,0xF8,0x3F,0xF0,0x07,0xFE,0x07,0xFE,0x00,0xFF,0xC0,0xFF,0xC0,0x1F,0xF8,0x00, // '"'

Ce sont les datas du 1er, du 2nd et du 3me caractère ('espace' le '!' et le '"')
j'ai tout effacé pour que soit comme ca:
Code: [Select]
0x00, // '0'
 0x00, // '!'
 0x00, // '"'

Maintenant il faut rajuster  les "adresses" de ces caractères
Le code original (cette partie est à la fin du fichier).
Code: [Select]
const GFXglyph SansSerif_bolditalic_92Glyphs[] PROGMEM = {
// bitmapOffset, width, height, xAdvance, xOffset, yOffset
  {     0,   1,   1,  33,    0,    0 }, // ' '
  {     1,  31,  67,  43,   13,  -67 }, // '!'
  {   261,  35,  25,  49,   17,  -67 }, // '"'
  {   371,  72,  66,  78,   10,  -66 }, // '#'
  {   965,  58,  84,  65,    9,  -70 }, // '$'
  {  1574,  84,  69,  93,   12,  -68 }, // '%'
  {  2299,  76,  69,  81,    8,  -68 }, // '&'
  {  2955,  16,  25,  29,   17,  -67 }, // '''
  {  3005,  39,  82,  43,   12,  -70 }, // '('
  {  3405,  39,  82,  43,    4,  -70 }, // ')'
  {  3805,  49,  43,  49,   10,  -68 }, // '*'
  {  4069,  60,  57,  78,   15,  -57 }, // '+'
  {  4497,  29,  30,  36,    1,  -17 }, // ','
  {  4606,  32,  13,  39,    9,  -33 }, // '-'
...........................

Le code modifié: (je mets la totalité des adresses de mon cas specifique)
Code: [Select]
const GFXglyph SansSerif_bold_92Glyphs[] PROGMEM = {
// bitmapOffset, width, height, xAdvance, xOffset, yOffset
  {     0,   1,   1,  33,    0,    0 }, // ' '
  {     1,  17,  67,  43,   13,  -67 }, // '!'
  {     2,  30,  25,  49,    8,  -67 }, // '"'
  {     3,  66,  66,  78,    6,  -66 }, // '#'
  {     4,  51,  84,  65,    8,  -70 }, // '$'
  {     5,  87,  69,  93,    3,  -68 }, // '%'
  {     6,  72,  69,  81,    6,  -68 }, // '&'
  {     7,  11,  25,  29,    8,  -67 }, // '''
  {     8,  28,  82,  43,    8,  -70 }, // '('
  {     9,  28,  82,  43,    7,  -70 }, // ')'
  {    10,  45,  43,  49,    2,  -68 }, // '*'
  {    11,  58,  57,  78,   10,  -57 }, // '+'
  {    12,  22,  30,  36,    4,  -17 }, // ','
  {    13,  29,  13,  39,    5,  -33 }, // '-'
  {    14,  17,  17,  36,    9,  -17 }, // '.'
  {    15,  35,  76,  35,    0,  -67 }, // '/'
  {    16,  56,  69,  65,    4,  -68 }, // '0'
  {    17,  48,  67,  65,   10,  -67 }, // '1'
  {    18,  50,  68,  65,    7,  -68 }, // '2'
  {    19,  52,  69,  65,    6,  -68 }, // '3'
  {    20,  57,  67,  65,    4,  -67 }, // '4'
  {    21,  52,  68,  65,    7,  -67 }, // '5'
  {    22,  54,  69,  65,    6,  -68 }, // '6'
  {    23,  52,  67,  65,    6,  -67 }, // '7'
  {    24,  54,  69,  65,    6,  -68 }, // '8'
  {    25,  54,  69,  65,    5,  -68 }, // '9'
  {    26,  17,  50,  38,   10,  -50 }, // ':'
  {    27,  22,  63,  38,    5,  -50 }, // ';'
  {    28,  59,  52,  78,   10,  -55 }, // '<'
  {    29,  59,  32,  78,   10,  -45 }, // '='
  {    30,  59,  52,  78,   10,  -55 }, // '>'
  {    31,  42,  67,  54,    7,  -67 }, // '?'
  {    32,  80,  81,  93,    6,  -65 }, // '@'
  {    33,  71,  67,  72,    0,  -67 }, // 'A'  utilisé
  {   628,  56,  67,  71,    8,  -67 }, // 'B'
  {   629,  58,  69,  69,    5,  -68 }, // 'C'
  {   630,  64,  67,  77,    8,  -67 }, // 'D'
  {   631,  49,  67,  64,    8,  -67 }, // 'E'
  {   632,  48,  67,  64,    8,  -67 }, // 'F'
  {   633,  65,  69,  77,    5,  -68 }, // 'G'
  {   634,  61,  67,  78,    8,  -67 }, // 'H' utilisé
  {  1145,  18,  67,  35,    8,  -67 }, // 'I'
  {  1146,  32,  85,  35,   -6,  -67 }, // 'J'
  {  1147,  67,  67,  72,    8,  -67 }, // 'K'
  {  1148,  49,  67,  60,    8,  -67 }, // 'L'
  {  1149,  76,  67,  93,    8,  -67 }, // 'M' utilisé
  {  1786,  61,  67,  78,    8,  -67 }, // 'N'
  {  1787,  70,  69,  79,    5,  -68 }, // 'O'
  {  1788,  56,  67,  68,    8,  -67 }, // 'P'
  {  1789,  70,  81,  79,    5,  -68 }, // 'Q'
  {  1790,  62,  67,  72,    8,  -67 }, // 'R'
  {  1791,  54,  69,  67,    7,  -68 }, // 'S'
  {  1792,  62,  67,  64,    1,  -67 }, // 'T'
  {  1793,  59,  68,  76,    8,  -67 }, // 'U'
  {  1794,  71,  67,  72,    0,  -67 }, // 'V'
  {  1795,  97,  67, 102,    3,  -67 }, // 'W'
  {  1796,  68,  67,  72,    2,  -67 }, // 'X'
  {  1797,  70,  67,  68,   -1,  -67 }, // 'Y' utilisé
............................................
};

Comme vous voyez, j'ai modifié seulement les premiers numéros, c'est en quelque sorte l'adresse de début des data du caractère.
Le premier caractère ( espace ) a comme adresse 0( normal c'est le 1er!).
Le 2eme l'adresse est 1 car "espace " à juste un octet de data.
Le 3eme l'adresse du fichier original est 261 car le 2eme occupe 260 octets + 1 du caractère précédent.
Dans le fichier du font modifié l'adresse est 2 car on à réduit à 1 octet le caractère précédent.
Etc etc.
Avec cette technique vous pouvez personnaliser vos fonts.
Je pense que les pros connaissent déjà cette possibilité mais peut être utile pour les newbies.
Pardonnez moi pour mon français, ce n'ai pas ma langue maternelle.

Go Up