Yo hago quiero animarte. Ahh, esto me trae tantos recuerdos felices de mi infancia, aprendiendo a programar. Esto era antes de los días de Internet, por supuesto, por lo que prácticamente todo tenía que inventarse sobre la marcha. Una de las cosas que aprendí a hacer fue manejar pequeñas fuentes de mapa de bits. Entonces me di cuenta de que, si le daba a cada personaje el espacio que necesitaba una M, la 'i' se vería perdida allí. Así que tuve que inventar el kerning, y cómo implementarlo. En realidad es bastante fácil, así que no dejes que nadie te desanime.
No dijiste qué tipo de formato quieres que sea la fuente, así que no entraré en esa área. En primer lugar, elija una fuente. Hay un montón de buenos en DaFont .
Comenzaría con una sola imagen que contiene la fuente.
Aquídibujécuadradosgrisesde8x8mmdetrásdecadapersonaje,soloparamostrarteelespaciado.Nohaynecesidaddetenerlosallírealmente.Cadapersonajequedajustificado.Acontinuación,escribeunprogramaparaimportarlaimagenybuscaencadacuadradode8x8paraencontrarelanchodelcarácter.Esteprogramaconviertecadacarácterenelformatobinarioquemejorseadaptaasuaplicación,ytambiénalmacenaelanchodecadacarácterjuntoconlosdatos.CuandolleguearepresentarloscaracteresenlapantallaLCD,podráutilizarlosdatosdeanchoparacolocarcadacarácterjustoalladodelanterior(+1píxelporunpocodeespacio).
Estetipodekerningmuybásicoesrealmentetodoloquenecesitascuandotrabajasconfuentesdeestetamaño.Sinduda,estodoloquenecesitasparaesafuenteenparticular,dondetodosloscaracteressonbastantecuadrados.
Dehecho,leserádifícilencontrarunafuentepequeñaquenecesiteunkerningreal.Nohabíaningunoenlasprimeras14páginasdeeseenlaceDaFontarriba.Finalmente,enlapágina15,encontréla fuente ISL Onyx .
¿Cómohacerkerningrealenunafuentepequeña?Estavez,cuandosuprogramaescaneecadacarácter,deberámedirladistanciaentreelcarácterylosbordesizquierdoyderecho,paracadafiladepíxeles:
Si hay una línea en blanco, simplemente haga los valores de la mitad del ancho de la fuente, o use el valor más alto de las líneas que no están en blanco.
Ahora, renderizar tarda un poco más. Cuando coloca cada carácter, debe comparar la columna de números a la derecha del primer carácter con la columna de números a la izquierda del siguiente carácter.
Suma las dos columnas y resta 2. (2 = distancia mínima entre caracteres) Esto nos da la columna de números en rojo.
Encuentreelnúmeromáspequeñoenlacolumnaynáquelo.Estenúmeronosdicecuántospíxelesaladerechanecesitamoscolocarelsiguientecarácter.Enestecaso,cero.PodemoscolocarlaVjustocontralaA,yaúnhabrádospíxelesentreellos.
¿Quéhaydedoscomo?
Esta vez, el número más pequeño es -2, lo que significa que debemos colocar los siguientes A dos píxeles más a la derecha para dejar dos píxeles entre ellos.
Requisitos de almacenamiento
¿Cuántos bytes va a ocupar todo esto? Suponiendo que todos los caracteres caben dentro de 8x8 píxeles, necesitará 8 bytes para almacenar los píxeles. El kerning simple agrega un byte por carácter. El kerning complejo solo agrega 8 bytes. ¿Por qué 8? Bueno, todos los números que necesita almacenar son menos de 16, por lo que solo requieren 4 bits de almacenamiento. Por lo tanto, puede almacenar ambos valores de kerning para cada fila en un solo byte.
Si tuvieras 64 caracteres, necesitarías 512 bytes para evitar el kerning, 576 bytes para el kerning simple y 1024 bytes para el kerning complejo.