Domanda

Come si realizzano i propri caratteri? Non voglio un algoritmo pesante (tipo di carattere, TrueType, Adobe, ecc.) E andrebbe bene con i caratteri bitmap pre-renderizzati.

Voglio l'antialiasing e vorrei caratteri proporzionali, se possibile.

Ho sentito che posso usare Gimp per eseguire il rendering (con qualche post elaborazione?)

Sto sviluppando un dispositivo incorporato con un LCD. Ha un processore a 32 bit, ma non voglio eseguire Linux (overkill - troppo spazio codice / dati per troppa poca funzionalità che vorrei usare)

C. C ++ se necessario, ma C è preferito. Algoritmi e idee / concetti vanno bene in qualsiasi lingua ...

-Adam

È stato utile?

Soluzione

Ai vecchi tempi della scena demo, disegnavo spesso tutti i personaggi del font in un'unica grande immagine bitmap. Nel codice, ho memorizzato le coordinate (X, Y) di ciascun carattere nel carattere, nonché la larghezza di ciascun carattere. L'altezza era generalmente costante per tutto il carattere. Se lo spazio non è un problema, puoi mettere tutti i personaggi in una griglia, ovvero: avere una distanza costante tra l'angolo in alto a sinistra di ciascun personaggio.

Il rendering del testo diventa quindi una questione di copia di una lettera alla volta nella posizione di destinazione. A quel tempo, di solito riservavo un colore come "trasparente" colore, ma potresti sicuramente usare un canale alfa per questo oggi.

Un approccio più semplice, che può essere utilizzato per caratteri b / n piccoli, è quello di definire i caratteri direttamente nel codice:

LetterA  db 01111100b
         db 11000110b
         db 11000110b
         db 11111110b
         db 11000110b
         db 11000110b

Il formato file XPM è in realtà un formato file con sintassi C che può essere usato come soluzione ibrida per la memorizzazione dei caratteri.

Altri suggerimenti

I caratteri bitmap pre-renderizzati sono probabilmente la strada da percorrere. Rendi il tuo font usando qualunque cosa, disponi i caratteri in una griglia e salva l'immagine in un semplice formato non compresso come PPM, BMP o TGA. Se si desidera l'antialias, assicurarsi di utilizzare un formato che supporti la trasparenza (BMP e TGA lo fanno; PPM no).

Per supportare larghezze proporzionali, dovrai estrarre le larghezze di ciascun personaggio dalla griglia. Non esiste un modo semplice per farlo, dipende da come si genera la griglia. Probabilmente potresti scrivere qualche breve programma per analizzare ogni personaggio e trovare il rettangolo di selezione minimo. Una volta che hai i dati di larghezza, li metti in un file ausiliario che contiene le coordinate e le dimensioni di ciascun carattere.

Infine, per eseguire il rendering di una stringa, cerchi ogni carattere e bitblit il suo rettangolo dalla bitmap del carattere al buffer della cornice, facendo avanzare la posizione raster della larghezza del carattere.

Abbiamo usato con successo il pacchetto SRGP per i caratteri. Abbiamo usato i caratteri a passo fisso, quindi non sono sicuro che possano caratteri proporzionali.

Stiamo usando i caratteri bitmap generati dal generatore di caratteri bitmap di anglecode:

http://www.angelcode.com/products/bmfont/

Questo è molto utilizzabile in quanto ha un output XML che sarà facile da convertire in qualsiasi formato di dati di cui hai bisogno.

Il bmfont di Angel Code aggiunge anche crenatura e un migliore impacchettamento alla vecchia alternativa che era MudFont.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top