Witam. Mam pytanie. Skąd wytrzasnąć fajne fonty wysokości 5 ; 8 ; 12 znaków o zmiennej szerokości i jak trzymać je w pamięci AVR, żeby zajmowały jak najmniej miejsca i prosto je było rysować. Puki co próbowałem czionki truetype konwertować, ale wielkość 5 i 8 jest za mała i wychodzą brzydkie. Pamiętam, że na 8 bitowe komputery była tego masa, ale jakoś nie mogę znaleźć. Co do trzymania ich w pamięci to mój pomysł na wysokość 8px jest taki że stworzyłem 2 tablicę (jedna z offsetem i szerokością znaku, a druga z właściwymi definicjami ). Definicje to kolejne bajty (1 bajt definicja pojedynczego pionowego paska znaku). W tablicy pierwszej w słowie najstarsze 4 bity to szerokość, pozostałe 12 to przesunięcie znaku w tablicy z definicjami. Zajmuje to sporo mniej niż standardowa tablica i od razu mamy szerokość każdego znaku. Definicje zaczynają się od znaku 32 ASCII. Ma ktoś jakiś ciekawszy pomysł na trzymanie czcionki 8px a także na 12px i 5px?
Jakich narzędzi lub źródeł użyć do pozyskania takich czcionek do użycia w AVR C? W załączniku czcionka 8px i procedura malowania znaku
Jakich narzędzi lub źródeł użyć do pozyskania takich czcionek do użycia w AVR C? W załączniku czcionka 8px i procedura malowania znaku
//wyswietla znak na wyświetlaczu i zwraca jego szerokość
uint8_t LCD_Char(uint8_t mychr, uint8_t xPos, uint8_t yPos){
uint16_t adres;
uint8_t width;
int8_t x;
int8_t y;
uint8_t linia;
adres = pgm_read_word(&charAddr8x8[mychr-32]); //offset znaku
width = adres>>12;
adres &= 0b0000111111111111;
for(x=0; x<width; x++) {
linia = pgm_read_byte(&charArray8x8[adres+x]);
for(y = 7; y > -1 ; y--){
if(linia&0b10000000){
//wyswietla pixel znaku
LCD_Pixel(xPos+x, yPos+y);
}
linia = linia<<1;
}
}
return width;
}