Fuentes de ancho variable pequeño para la pantalla LCD

3

Estoy buscando una fuente pequeña de ancho variable que pueda usarse en pantallas LCD pequeñas (en este caso, una pantalla de 128x64 píxeles). Me gustaría que tuviera una altura de 8 píxeles o menos, para que los caracteres se muestren en una línea de la pantalla. He intentado usar programas como "The Dot Factory" y "GLCD Font Creator", pero parece que no son adecuados para fuentes tan pequeñas.

    
pregunta alexbb

2 respuestas

9

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.

    
respondido por el Rocketmagnet
2

Cuando trabajé con la plataforma NETMF, había una herramienta en el SDK (tfconvert) para crear una fuente para la plataforma a partir de cualquier fuente instalada en la PC. Lo he usado para crear un par de fuentes diminutas (de 6-8 píxeles) que funcionaron muy bien en la pantalla OLED de 128x64 píxeles en mi pizarra. También había una GUI agradable para controlar cada parámetro de la conversión. No sé si el formato está documentado y si puede usarlo, pero puede darle un vistazo.

El SDK de NETMF se puede descargar gratuitamente desde Microsoft.

    
respondido por el Axeman

Lea otras preguntas en las etiquetas