| Author |
Message
|
mirekk36 Poziom 25

Joined: 17 Jun 2006 Posts: 8714 Location: Szczecin
|
#1
19 Dec 2011 09:03 Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
Witam,
W związku z tym iż zająłem się głębiej wyświetlaczami graficznymi w tym matrycowymi oraz LCD (TFT color), zmuszony byłem przygotować sobie narzędzie do wygodnego generowania fontów graficznych różnej maści.
Dlatego chciałbym przedstawić program "Pixel Factory". Jest to kompletny program w zakresie tworzenia nie tylko fontów graficznych w postaci gotowych plików do zainkludowania do kompilatora języka C ale można także wygenerować fonty binarne.
Jak widać na obrazku, po lewej stronie można wpisać sobie tylko te teksty, które używamy na własnym ekranie LCD w mikrokontrolerze, a program wygeneruje nam TYLKO obrazy graficzne tych fontów do znaków które zostały użyte!!! Widać to w czerwonej ramce. Dzięki temu prezentacja graficzna takiego fontu zajmuje w pamięci mikrokontrolera tak mało jak to jest tylko możliwe ;)
Na powyższym obrazku widać, że jeśli np chcemy font w takiej postaci jak na typowych wyświetlaczach 7-segm. LED - to wystarczy zassać taki font do Windows i proszę bardzo wybieramy go z listy i generujemy dla naszego własnego wyświetlacza. Później wygląda to w rzeczywistości mniej więcej tak jak w tym temacie:
http://www.elektroda.pl/rtvforum/viewtopic.php?t=2094762&highlight=
Poza tym można sobie wybierać swobodnie różne style fontu oraz jego rozmiar dowolny jak niżej:
Generalnie program generuje nam dwa pliki dla języka C. Jeden to plik zawierający same definicje fontów a drugi to plik nagłówkowy. Pierwszy plik, poza tablicą zawierającą hexadecymalne wartości obrazu każdego znaku, pokazuje także ładnie w kodach ASCII za pomocą znaków # obraz tegoż znaku dla oka ;)
W dalszej kolejności w pliku mamy tablicę deskryptorów czyli taką tablicę typu lookup, z której odczytujemy już spokojnie wg kodu ASCII danego znaku jego szerokość w pixelach oraz miejsce w poprzedniej tablicy. Na końcu zaś tego pliku mamy jedną strukturę w której umieszczone są wszystkie informacje o danym foncie. Dzięki takiemu podejściu można bardzo szybko je wyświetlać w kodzie programu no i zajmują bardzo mało miejsca.
Żeby jeszcze polepszyć, można sobie wygenerować font bezpośrednio do plików binarnych które można umieścić np bezpośrednio na karcie pamięci SD i to z niej odczytywać obrazy fontów. Działa spokojnie i rewelacyjnie szybko. Chociaż wiadomo, że jeśli to duży font to będzie pewne spowolnienie do tych wczytywanych z Flash. Ale to już można dopasować wg założeń projektu.
Na koniec jeszcze zakładka ustawienia, nad którą jeszcze pracuję tak aby można było sobie zapisywać profile i tak zmieniać parametry żeby programu można było używać nie tylko do AVR GCC, nie tylko CodeVision ale także w ogóle dla innych mikrokontrolerów jak PIC, czy ARM itp
Cały program został napisany w Delphi i oczywiście udostępniam jego pierwszą wersję w pełni poniżej w załączniku.
Dodam, że pomysł na taki program zaczerpnąłem gdzieś z internetu, tzn głównie ideę generowania fontów, bo program napisałem całkowicie od nowa i swój własny, dodając już w obecnej chwili nowe możliwości w porównaniu do tego z netu. I co ważne, mój program w pełni prawidłowo generuje fonty z polskimi literkami/ogonkami. A tamten miał z tym poważne problemy.... Tylko nie pamiętam już nazwy tamtego programu bo dość dawno go namierzyłem i kiedyś w nim trochę próbowałem działać.
Jak widać, w programie są jeszcze kolejne zakładki, w których jak mi starczy czasu i sił powstaną jeszcze kolejne ciekawe możliwości jeśli chodzi o narzędzie do wygodnego programowania wyświetlaczy graficznych wszelkiej maści. Od zwykłych matrycowych LED, poprzez LCD mono aż po kolorowe TFT LCD.
Najnowsze wersje programu można pobrać stąd: Link
(na dole tej strony znajduje się link do pobrania - dzięki temu zawsze będzie mogał być aktualna wersja)
|
|
| Back to top |
|
 |
Google

|
#
19 Dec 2011 09:03 |
|
|
|
|
|
| Back to top |
|
 |
nsvinc Poziom 22

Joined: 25 Mar 2006 Posts: 2066 Location: otfock
|
#2
19 Dec 2011 13:17 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
1. Czy mi się tylko wydaje, czy faktycznie każdy znak jest renderowany tak, jakby był on fontem monospace'owym?
2. Sądzę, że zawieranie spacji w definicji znaku to marnowanie miejsca, a dodatkowo komplikacja gdy chcesz mieć zmienny kerning (odległość między znakami) mniejszy niż narzucona spacja. Każdy wygenerowany znak ma conajmniej jeden bit odstępu od lewej strony...
Ale dobrze, że można to wyłączyć :]
3. Udostępniłeś program do generowania fonta, ale nie udostępniłeś silnika który je wyświetla. W szczególności mam wątpliwości co do operowania start char'em. Jeśli ktoś wybierze sobie np. cyfry 0-9 A-F, i tylko małe litery, to co z kodami z zakresu G-`, skoro start char to 0x30? Silnik wyswietlania fontów może iść w krzaki, jeśli w kodzie będzie próba wyświetlenia znaku np. K.
W moim rozwiązaniu jest tak, że definiowany jest każdy niechciany znak od 'start char', lecz taki niechciany znak ma po prostu 0 linii - ale jest obecny w charsecie, a offset w tabelce charsetu to po prostu podany_znak-start_char...
4. Marnowaniem miejsca jest również pełna definicja znaków które składają się z kilku linii, np. " ' ' Czy przewidujesz obsługę zmiennej ilości linii na znak? I tak masz oddzielną tablicę deskryptorów, więc ten patent pozwoliłby zaoszczędzić miejsce zajmowane przez charset.
Skoro obsługujesz zmienną ilość bitów w linii na znak, to nie tylko fonty można wyświetlać. Np. ja potraktowałem znak jako piktogram, i napisałem silnik zoptymalizowany pod wyswietlanie tak naprawdę czegokolwiek, byle piktogram nie był większy niż 32x32px. Wtedy w charsecie oprócz potrzebnych znaków można zawrzeć kółeczko, dzwoneczek, strzałeczki, mordkę, płomyczek, płatek śniegu, słoneczko, księżyc itp itd, lub wpakować to w oddzielny charset. Fajnie prezentuje się kompozycja "27.35*C [płomyczek]" (tyle, że stopień, zamiast gwiazdki).
Zwracam uwagę na bug. Proces:
1. uruchomienie programu
2. Dodanie do memo "wszystkie znaki"
3. wygenerować charset
4. "clear"
5. dodanie do memo "cyfry"
6. ręczne dopisanie do memo znaków ABCDEF
7. dodanie do memo "małe litery"
!!wszystkie znaki w memo jednym ciągiem, bez spacji ani cr/lf !!
8. wygenerować charset
Po kroku 8 program zwrócił to co w załączniku. Problem - w komentarzu obok definicji linii nie ma znaku.
Tak samo program zachowuje się po wpisaniu w memo AAAA1.
Kolejne uwagi:
- nie działa zapisz pliki jako - brak savedialogu
- brak mozliwości szybkiego czyszczenia memo'ów z wynikiem generacji, mozna tylko ctrl+A, del
- okno about nie jest przesuwalne - u mnie pojawiło się nieco poza ekranem (dwa monitory, rozciągnięty pulpit) i nie da się go ani przesunąć, ani przeczytać
- apply nie zamyka okna ustawień - jedyna opcja zamknięcia tego okna, to x lub alt-f4 (tak ma być?)
- status bar nie jest anchorowany do dolnej krawedzi okna, a tylko do do dolnej krawędzi group boxa 'output'...
- pasek wyswietlania czcionki "bitmap" wjeżdża pod group boxa "input" dla duzej czcionki, np. 72.
- próba wygenerowania charsetu z znaków o wielkości 72 kończy się rzuceniem access violation
|
|
| Back to top |
|
 |
mirekk36 Poziom 25

Joined: 17 Jun 2006 Posts: 8714 Location: Szczecin
|
#3
19 Dec 2011 15:01 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
1. Zdecydowanie nie, na tym etapie można generować tylko właśnie fonty "proportional", czyli każdy znak ma inną szerokość. Już pracuję nad tym żeby dorobić możliwość "FIXED" dla takich fontów jak np "Courier"
2. W żadnym znaku nie ma spacji, to tylko tak wygląda w prezentacji pseudo-graficznej na znakach ASCII #. A tak na prawdę wyżej widać ile każdy znak ma szerokości. Np literka małe "i" przy wielkości fontu np 12, ma szerokość TYLKO jednego pixela
3. To jest wg mnie ogromna zaleta. Owszem program może iść w krzaki jeśli wygeneruję np font tylko dla znaków [0-9] i będę chciał wyświetlić jakąś literę w tym foncie. Ale też IDEA posługiwania się tym jest całkowicie inna. Chodzi o to, że np mogę sobie wygenerować font TYLKO I WYŁĄCZNIE z tymi znakami, które są użyte w już zaszytych na stałe tekstach np w pamięci FLASH. A przecież nie zawsze potrzebne są wtedy inne znaki. Robi się to SUPER ŁATWO, bo jeśli np mam ze dwa takie teksty jak niżej w kodzie programu:
"TEST SILNIKA"
"POMIAR NAPIĘCIA"
to wystarczy, że je skopiuję do pola po lewej stronie programu i zostanie wygenerowany font TYLKO I WYŁĄCZNIE dla tych znaków. Tak samo np jeśli chcę korzystać tylko z cyfr typu LED 7-segm. To po co mam generować font dla np 128 znaków ?? i marnować pamięć. Wystarczy mi tylko font od kodu '0' do '9'. Jest wtedy ciągłość w tablicy deskryptorów i wszystko zajmuje minimalną możliwą ilość miejsca.
Tak więc można oczywiście zrobić tak żeby niezdefiniowane znaki miały szerokość = 0 itp ... no ale jak mówię - to nie jest font do działania jakiegoś systemu, gdzie user może sobie wklepać kod znaku, który mu się żywnie podoba. A jeśli tak miałoby być to wtedy dałbym mu font o jakiejś nazwie default_font, który będzie miał zdefiniowane wszystkie nawet 255 znaków ASCII.
4. No można by tak było rzeczywiście zrobić dodając jeszcze jeden parametr w tablicy deskryptorów np pixel startu i wtedy każdy znak mógłby mieć różną wysokość a tym samym zajmować mniej miejsca w pamięci. Tylko wtedy tablica deskryptorów się rozrośnie aczkolwiek zdaję sobie sprawę że i tak będzie większy uzysk. Nie mniej jednak to dla mnie na tym etapie jeszcze nie jest takie ważne z uwagi, że zarówno tablicę deskryptorów jak i definicje znaków będę miał możliwość umieszczania na karcie pamięci. Wtedy to hulaj dusza o ile nie będą to font akurat potrzebne zbyt szybko do odrysowania
Nad pozostałymi rzeczami jeszcze pracuję, np te piktogramy własne ale i inne fajne rzeczy.
Dodano po 1 [godziny] 21 [minuty]:
Wgrałem troszkę poprawioną wersję, więc:
| nsvinc wrote: |
Zwracam uwagę na bug. Proces:
1. uruchomienie programu
2. Dodanie do memo "wszystkie znaki"
3. wygenerować charset
4. "clear"
5. dodanie do memo "cyfry"
6. ręczne dopisanie do memo znaków ABCDEF
7. dodanie do memo "małe litery"
!!wszystkie znaki w memo jednym ciągiem, bez spacji ani cr/lf !!
8. wygenerować charset
Po kroku 8 program zwrócił to co w załączniku. Problem - w komentarzu obok definicji linii nie ma znaku.
Tak samo program zachowuje się po wpisaniu w memo AAAA1. |
Spróbuj jeszcze raz
| nsvinc wrote: |
Kolejne uwagi:
- nie działa zapisz pliki jako - brak savedialogu |
poprawione
| nsvinc wrote: |
| - brak mozliwości szybkiego czyszczenia memo'ów z wynikiem generacji, mozna tylko ctrl+A, del |
poprawione
| nsvinc wrote: |
| - okno about nie jest przesuwalne - u mnie pojawiło się nieco poza ekranem (dwa monitory, rozciągnięty pulpit) i nie da się go ani przesunąć, ani przeczytać |
mam nadzieję, że poprawione (nie jestem w stanie sprawdzić na 2 monitorach)
| nsvinc wrote: |
| - apply nie zamyka okna ustawień - jedyna opcja zamknięcia tego okna, to x lub alt-f4 (tak ma być?) |
poprawione
| nsvinc wrote: |
- status bar nie jest anchorowany do dolnej krawedzi okna, a tylko do do dolnej krawędzi group boxa 'output'...
- pasek wyswietlania czcionki "bitmap" wjeżdża pod group boxa "input" dla duzej czcionki, np. 72. |
nad tym popracuję później to na razie szczegół kosmetyczny
| nsvinc wrote: |
| - próba wygenerowania charsetu z znaków o wielkości 72 kończy się rzuceniem access violation |
hmmm to mi się nie pojawia ....
|
|
| Back to top |
|
 |
nsvinc Poziom 22

Joined: 25 Mar 2006 Posts: 2066 Location: otfock
|
#4
19 Dec 2011 15:33 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
1. Imho to właśnie dobrze, że fixed nie jest zaimplementowany - nie jest jako taki potrzebny. W silniku wyświetlania może być funkcja, która odpowiednio dobiera odstęp jednego znaku od drugiego, tak aby user miał wrażenie, że dany znak jest zawsze w tym samym miejscu, a nie zależnie od szerokości znaku poprzedniego. W mojej implementacji tak mam - tak wyświetlam zegarki, liczby w spin editach, itp.
3. Nie chodziło mi o to, że to jest źle czy coś, też sądzę, że generowanie tylko potrzebnych znaków do charsetu ma sens; zresztą sam mam zaimplementowany podobny mechanizm.
Sprawa którą poruszyłem dotyczy indeksowania znaków w tabeli. Jeśli indeksujemy tabelkę z charsetem liczbą podany_kod_ascii-start_char (a chyba tak jest zrobione), to na co wskaże taki indeks dla niezdefiniowanego znaku? Po przeczytaniu kodu wynikowego generowanego przez program, widzę, że tak na prawdę nie pomijasz niechcianych znaków, a tylko ich nie definiujesz, lecz w tablicy deskryptorów znak jak najbardziej już istnieje. Z tego co widzę, nie ma dziury jeśli każe się zrobić charset ze znaków 0-9 A-F. Istnieje np. indeks dla małpy, lecz nie ma jego definicji w charsecie. Dobrze to widzę?
I jeszcze pytanie o binarną postać takiego fonta - skoro w pliku jest binarka, to chyba musi istnieć parser takiego pliku?... Planujesz wyświetlanie znaków bezpośrednio z pliku na karcie, czy font przed wyświetleniem musi być "zainstalowany" do programu (np. pod wskaźnik)?
Dodano po 12 [minuty]:
Pierwszy bug: nadal to samo. Teraz nawet za pierwszym razem po dodaniu wszystkich znaków i "generuj", nie pojawia się wygląd znaku w komentarzach. Co ciekawe, jak za pierwszym razem ściągnąłem i odpaliłem soft, pierwsze "generuj" dla AAAA1 wygenerował poprawnie dwa znaki, łącznie z ich wyglądem w komentarzu. Każde następne "generuj" dla dowolnych znaków już nie pokazuje wyglądu w komentarzach, restarty programu nie pomagają, więc chyba grzebiesz w rejestrze windowsa ;D
2. ok
3. ok
4. ok (about jest chyba po prostu wyswietlany na środku formatki ;] )
5. ok
7. Nadal rzuca zonkiem, gdy:
a) uruchomić program
b) dodać wszystkie znaki
c) "generuj"
d) zmienić rozmiar na 72
e) "generuj"
f) "clear"
g) wpisać w memo "12" (bez cudzysłowów)
h) zmienić rozmiar na 12
i) "generuj" <-- tu rzuca wyjątkiem
Bład jest powtarzalny trzy na pięć razy dla powyższej procedury, przeprowadzonej 10 razy.
Ogólnie powtarzając kilka razy proces wpisania znaków, zmiany rozmiaru, "generuj", clear za którymś razem się wywali, losowo. Faktycznie nie zależy to od podanego rozmiaru czcionki. Śmierdzi to dostępem na zwolniony zasób lub hardcorowym przekroczeniem indeksu w jakiejs tablicy...
|
|
| Back to top |
|
 |
mirekk36 Poziom 25

Joined: 17 Jun 2006 Posts: 8714 Location: Szczecin
|
#5
19 Dec 2011 16:01 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
| nsvinc wrote: |
| 1. Imho to właśnie dobrze, że fixed nie jest zaimplementowany - nie jest jako taki potrzebny. W silniku wyświetlania może być funkcja, która odpowiednio dobiera odstęp jednego znaku od drugiego, tak aby user miał wrażenie, że dany znak jest zawsze w tym samym miejscu, a nie zależnie od szerokości znaku poprzedniego. W mojej implementacji tak mam - tak wyświetlam zegarki, liczby w spin editach, itp. |
Tzn ja robię teraz opcję, dzięki której będzie można jednak zafixować szerokość danego fontu (wiem zwiększy się nieco zajętość pamięci) jednak będzie to mogła nadal wyświetlać ta sama najprostsza i najszybsza procedura. Z drugiej strony dodanie tego w programie w razie czego to już szczegół.
| nsvinc wrote: |
| 3. ...........Istnieje np. indeks dla małpy, lecz nie ma jego definicji w charsecie. Dobrze to widzę? |
Tak dobrze widzisz, takie jest założenie właśnie.
| nsvinc wrote: |
| I jeszcze pytanie o binarną postać takiego fonta - skoro w pliku jest binarka, to chyba musi istnieć parser takiego pliku?... |
Tu poszedłem maksymalnie najprostszą drogą. Tzn jak widać, program generuje dwa pliki binarne do każdego wygenerowanego fontu. Przy czym jeden *.dsc to są CZYSTE bajty po kolei tablicy z definicjami znaków, a drugi plik to po prostu tablica z deskryptorami. Zatem nie jest praktycznie potrzebny żaden skomplikowany parser. Po prostu wystarczy pobrać 3 bajty z pliku deskryptorów (ASCII*3) wtedy mamy już ładnie szerokość znaku w pixelach oraz wskaźnik do bajtu gdzie się zaczyna definicja w kolejnym pliku *.bin - czyli obsługa znowu taka sama jak by leciało z pamięci.
| nsvinc wrote: |
| Planujesz wyświetlanie znaków bezpośrednio z pliku na karcie, czy font przed wyświetleniem musi być "zainstalowany" do programu (np. pod wskaźnik)? |
Próbowałem już nawet i widać to na tym filmiku z wyświetlaniem bezpośrednio z karty pamięci i to mnie właśnie bardzo interesuje bo daje zadowalające efekty a w procku potrzebuję tylko tyle pamięci RAM co zajmuje struktura FONT_INFO, która w zasadzie przechowuje same wskaźniki.
Dodano po 12 [minuty]:
kurczę no to są jakieś dwa BUG'i. Będą ciężkie na razie do wyłapania bo u mnie każdy font generuje ładnie obrazki w kodach ASCII - również dla tego AAAA1.
(ale czy to oznacza, że teraz w ogóle nie generuje się żaden font - czy tylko jakiś jeden jego rodzaj? dziwna sprawa - bo męczę to do upadłego i ani razu nie chce się to źle zachować jak u ciebie)
No i nad tym Acces Violation - też będe musiał posiedzieć.
|
|
| Back to top |
|
 |
hts Poziom 15

Joined: 16 Mar 2003 Posts: 206 Location: Wrocław
|
#6
19 Dec 2011 16:04 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
Bardzo ciekawy program, ale czy także tutaj program ma zaimplementowaną "datę ważności" i tak jak w przypadku kilku wcześniejszych Twoich programów, nie uruchomi się np za rok?
|
|
| Back to top |
|
 |
nsvinc Poziom 22

Joined: 25 Mar 2006 Posts: 2066 Location: otfock
|
#7
19 Dec 2011 16:10 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
Font się generuje bez problemu za każdym razem, o ile nie leci wyjątek. Problem jest z tego co widzę tylko i wyłącznie w przedstawieniu znaku w komentarzu obok bajtów. W hex wygląda to tak, że wstawiasz prawidłową ilość spacji, lecz nie wstawiasz pomiędzy te spacje gwiazdek. Sądzę, że w pętli po bitach w linii masz if(bit_ustawiony) putchar('*'); else putchar(' '); Tak jakby nie działał putchar('*');
Zresztą właśnie to widać w pliku który załączyłem wcześniej...
|
|
| Back to top |
|
 |
mirekk36 Poziom 25

Joined: 17 Jun 2006 Posts: 8714 Location: Szczecin
|
#8
19 Dec 2011 21:59 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
Dobra - poprawione - chyba udało mi się wyeliminować ten "Acces violation error" (chociaż go nie uświadczyłem ale być może znalazłem miejsce w kodzie które mogło go powodować czasem)
Teraz powinno już wszystko ładnie działać. Tylko jednak będę musiał zmienić formę binarną jednak na jeden plik na karcie zamiast tych dwóch bo wtedy jest znaczne spowolnienie przy korzystaniu z PetitFat'a.
|
|
| Back to top |
|
 |
nsvinc Poziom 22

Joined: 25 Mar 2006 Posts: 2066 Location: otfock
|
#9
19 Dec 2011 22:09 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
No najoptymalniej chyba byłoby prebuforowanie tablicy deskryptorów, czyli deskryptory na początku (token+rozmiar+tablica+crc16) w wielokrotności sektora a dalej faktyczna binarka z fontem (token+rozmiar+tablica+crc32). Najprostszy parser wygądałby jak interpreter rozpoczynającego tokena z rozmiarem, przy "otwarciu" fonta check sum kontrolnych.
Tego typu interpreter byłby szybki - a dodatkowo buforując deskryptory, na wyciągnięcie ręki udostępniając numer sektora i offset bajtu w nim, gdzie zaczyna się definicja znaku - byłby wręcz demonicznie szybki i umożliwiłby renderowanie piktogramów z animacjami 25fps bezpośrednio z pamięci masowej, nie zużywając 30% czasu procesora (a tyle zużycia tylko dla wyświetlania GIF-like animacji, byłoby dla mnie nieakceptowalne)
------------------------------------------
Zdawałoby się, że problem z access violation faktycznie pokonałeś - na razie wspomiana procedura 20 razy przeprowadzona nie spowodowała rzucenia wyjątkiem.
Tak samo niewyświetlanie "gwiazdek" w komentarzach przedstawiających graficznie znak chyba też już jest ok - faktycznie teraz wszystko chodzi stabilnie i zgodnie z założeniami ;)
|
|
| Back to top |
|
 |
Szymon Tarnowski Poziom 19

Joined: 31 Oct 2008 Posts: 648
|
#10
19 Dec 2011 23:08 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
Swego czasu popełniłem podobny program i wrzuciłem na forum, potem widziałem jeszcze jeden. Jakoś mnie ta aplikacja nie powalił "innowacyjnością", ale nie o tym chciałem napisać.
Mam natomiast inne pytanie, co z prawami autorskimi do fontów? Wszakże wolno używać ich w ramach systemu, wolno drukować własne dokumenty z fontami, ale mam wątpliwości czy wolno sobie ot tak wziąć wygląd fontu z systemu Microsoft Windows i użyć we własnym autorskim projekcie. Co prawda w przypadku hobbystycznym to jeszcze ujdzie, ale w przypadku komercyjnym to może już podpadać pod kradzież. Czy może ktoś interesował się tym zagadnieniem?
|
|
| Back to top |
|
 |
nsvinc Poziom 22

Joined: 25 Mar 2006 Posts: 2066 Location: otfock
|
#11
19 Dec 2011 23:19 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
Tak samo jak wolno wydrukować sobie dokument danym fontem, tak samo wolno "wydrukować" sobie tekst tym fontem na ekranie. Czy "drukujesz" na kartce, na monitorze peceta, czy wyświetlaczu we własnym projekcie - na jedno wychodzi.
W szczególności, jeśli font jest otwarty i do dowolnego użytku.
Przecież budując urządzenie sprzedajesz urządzenie, a nie prawa autorskie do fonta (których niejako nie masz jako konstruktor).
Jeśli font byłby np. trialem, wersją testową lub ograniczoną, to wtedy rozpowszechnienie go w urządzeniu byłoby już naruszeniem praw autorskich. Jeśli font jest otwarty lub go kupiłeś - nie ma wtedy najmniejszego problemu.
|
|
| Back to top |
|
 |
mirekk36 Poziom 25

Joined: 17 Jun 2006 Posts: 8714 Location: Szczecin
|
#12
19 Dec 2011 23:30 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
| Szymon Tarnowski wrote: |
| Swego czasu popełniłem podobny program i wrzuciłem na forum, potem widziałem jeszcze jeden. Jakoś mnie ta aplikacja nie powalił "innowacyjnością", ale nie o tym chciałem napisać. |
To o czym chciałeś pisać? o tym jak to nie powaliło cię coś innowacyjnością ? Pokaż lepiej swój wynalazek i odnieś się do niego zamiast pisać coś o czym nie chciałeś pisać. Ale żeby ci pomóc to proszę bardzo znalazłem ten twój "powalający" innowacyjnością program:
Normalnie szok, a z automatyzacją generowania fontów ma tyle wspólnego co wieszak z gruszką. Zatem jak masz o czymś nie pisać to po prostu nie pisz. Lepiej będzie
| Szymon Tarnowski wrote: |
| Mam natomiast inne pytanie, co z prawami autorskimi do fontów? Wszakże wolno używać ich w ramach systemu, wolno drukować własne dokumenty z fontami, ale mam wątpliwości czy wolno sobie ot tak wziąć wygląd fontu z systemu Microsoft Windows i użyć we własnym autorskim projekcie. Co prawda w przypadku hobbystycznym to jeszcze ujdzie, ale w przypadku komercyjnym to może już podpadać pod kradzież. Czy może ktoś interesował się tym zagadnieniem? |
Tak wiele osób się tym interesowało ale widocznie tylko ty masz z tym, i to poważny, problem jak widać. A z takim pytaniem lepiej zwróć się o poradę na jakieś forum prawnicze. Bo to także nie ma nic wspólnego z tym tematem.
|
|
| Back to top |
|
 |
Google

|
#
19 Dec 2011 23:30 |
|
|
|
|
|
| Back to top |
|
 |
nsvinc Poziom 22

Joined: 25 Mar 2006 Posts: 2066 Location: otfock
|
#13
19 Dec 2011 23:38 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
Ekhem, a niby napisanie programu w różnej maści builderach jest sztuką? Każdy kto potrafi, klepie sobie praktycznie każdy potrzebny sofcik sam. Ja też mam swój sofcik do zupełnie zautomatyzowanego tworzenia charsetów dla swojego PiktoSilnika ;]
Nie przedstawiłem go nikomu, bo musiałbym z racji bardzo specyficznej konstrukcji samego charsetu przedstawić również wspomniany silnik, który z tymi charsetami pracuje, a mam powody, aby tego nie robić.
Nie wiem czy ma sens po raz kolejny na DIY skakać sobie do gardeł kto ma lepsze 'cośtam'...
|
|
| Back to top |
|
 |
Google

|
#
19 Dec 2011 23:38 |
|
|
|
|
|
| Back to top |
|
 |
mirekk36 Poziom 25

Joined: 17 Jun 2006 Posts: 8714 Location: Szczecin
|
#14
19 Dec 2011 23:43 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
| nsvinc wrote: |
| Ekhem, a niby napisanie programu w różnej maści builderach jest sztuką? |
Jak ktoś chce to zawsze sobie coś napisze.
| nsvinc wrote: |
| Nie wiem czy ma sens po raz kolejny na DIY skakać sobie do gardeł kto ma lepsze 'cośtam'... |
I o to chodzi.
|
|
| Back to top |
|
 |
markosik20 Poziom 22

Joined: 27 Mar 2003 Posts: 2032 Location: Będzin
|
#15
19 Dec 2011 23:51 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
| mirekk36 wrote: |
I co ważne, mój program w pełni prawidłowo generuje fonty z polskimi literkami/ogonkami. A tamten miał z tym poważne problemy.... Tylko nie pamiętam już nazwy tamtego programu bo dość dawno go namierzyłem i kiedyś w nim trochę próbowałem działać.
|
Pewnie chodzi o płatny FontGen. Generował bardzo podobne pliki (choć miały bardziej rozbudowaną strukturę opisu danych).
Bardzo dobrze Ci wyszedł programik. Dorzuciłbym jeszcze możliwość generowania offsetu danych (FONT_CHAR_INFO) dla wszystkich znaków ASCII a nie tylko tych które mają swoje wzorce. Ułatwiłoby to wtedy korzystanie z różnych czcionek.
|
|
| Back to top |
|
 |
mirekk36 Poziom 25

Joined: 17 Jun 2006 Posts: 8714 Location: Szczecin
|
#16
20 Dec 2011 00:59 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
| markosik20 wrote: |
Pewnie chodzi o płatny FontGen. |
Nie, nie ja widziałem gdzieś kiedyś inny i był na pewno darmowy. Ale właśnie spodobała mi się ta zasada działania z generowaniem fontów.
| markosik20 wrote: |
| Dorzuciłbym jeszcze możliwość generowania offsetu danych (FONT_CHAR_INFO) dla wszystkich znaków ASCII a nie tylko tych które mają swoje wzorce. Ułatwiłoby to wtedy korzystanie z różnych czcionek. |
hmm nie za bardzo rozumiem, bo o jaki offset chodzi do znaków, których nie ma? Jeśli ich nie ma to nie mogę podać offsetu przecież. A generalnie taka konstrukcja właśnie idealnie, przynajmniej jak dla mnie nadaje się do korzystania ze wszystkich czcionek jakie tylko sobie załaduję do Flasha. Zawsze odtwarza je jedna i ta sama funkcja dzięki takiej konstrukcji. (tzn nie żebym twierdził, że to jest najlepsze z najlepszych rozwiązań - ot po prostu mi takie podpasowało) .... ale chętnie się dowiem co miałeś tu na myśli.
|
|
| Back to top |
|
 |
excray Poziom 21

Joined: 05 Jan 2003 Posts: 1134 Location: ze wsi
|
#17
20 Dec 2011 01:28 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
Bardzo fajny programik. Na szybko zauważyłem tylko jeden mały minusik do ewentualnej poprawy. Po wybraniu opcji z checkboxa np: "Wybierz czcionkę" albo "styl" bądź "rozmiar program wykonuje swoje wewnętrzne operacje i ten checkbox staje się nieaktywny. Więc jak chcę przejrzeć jeden tekst w kilku różnych opcjach to za każdym razem muszę go (checkbox) od nowa zaznaczyć - nie mogę sobie "strzałką" przewijać np. różnych rozmiarów fontów. Da się to poprawić -trzeba w programie przed operacjami sprawdzić jaki checkbox jest aktywny po po wszystkim znowu domyślnie ustawić go aktywnym. Ale jak wspomniałem to jest niewielki minusik. Więcej zastrzeżeń nie mam ale testowałem kilka minut ze względu na późną porę. Reszta na duży plus. W szczególności za udostępnienie.
EDIT> Z tego co widzę to nawet nie jest kwestia aktywnego checkboxa tylko aktywnego okna. Więc wystarczy ustawić ponownie domyślne aktywne okno główne.
|
|
| Back to top |
|
 |
gbd.reg Poziom 15

Joined: 01 Jan 2008 Posts: 246 Location: Przemyśl
|
#18
20 Dec 2011 06:48 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
Świetne narzędzie, ale dorzuciłbym jeszcze możliwość wpisywania znaków w trybie regex-like, czyli tak jak się je definiuje w nawiasach [] w wyrażeniach regularnych.
Zauważyłem błędy:
1. Nie można wpisać własnej wartości w polu rozmiaru czy wyboru czcionki. Program po wpisaniu znaku wybiera jakąś wartość pasującą do wpisanego z listy, a następnie usuwa focus z pola edycji.
2. Nie wiem czy tak ma być, ale u mnie podgląd jest osobnym oknem i to na dodatek gdzieś poza ekranem, bo w menedżerze okien go widzę, ale na pulpicie nie. Raz udało mi się go jakimś cudem wywołać na ekran
3. Wciśnięcie ENTER przy zaznaczonym jakimś polu edycji (prócz pola do wpisania znaków) nic nie powoduje. Moim zdaniem jakaś akcja powinna się wykonać, w zależności od wybranego pola.
4. Jeśli konwersja RGB ma nie mieć sekcji "output" to chyba lepiej kartami objąć całe okno, a nie tylko sekcję "input"
5. Jeśli próbuję zmienić rozmiar okna łapiąc od lewej lub od góry, to po osiągnięciu minimalnego rozmiaru przesuwa się okno (tak jakby program zezwalał na zmianę rozmiaru na mniejszą, a później okno powiększał, ale od przeciwległej krawędzi)
6. Przy rozciąganiu okna w poziome rozciąga się tylko sekcja Output. Input pozostaje nieruszony i nie da się go powiększyć
7. W pasku statusu zamiast (c) polecam wstawić znaczek © :)
8. Przycisk "clear all" przy polach źródeł czyści całkowicie okno, a domyślnie po otwarciu programu były tam jakieś komentarze.
9. W polach kodów źródłowych każda linia jest "wyspacjowana" do końca tego pola, co powoduje wymuszenie suwaka poziomego.
10. Nie da się skopiować kawałka źródła
11. W źródle jest opis "2, /* Width, in pixels, of space character */" co sugeruje, że wartość ta jest szerokością spacji, a z tego co zaobserwowałem to raczej przestrzeń między znakami.
12. Nie wiem po co aplikacja po otwarciu okna konfiguracji profili dostaje przezroczystość. Ma to symbolizować nieaktywne okno?
|
|
| Back to top |
|
 |
Svavo Poziom 18

Joined: 29 Jan 2005 Posts: 501 Location: StW/W-wa/Zielonka
|
#19
20 Dec 2011 10:13 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
To i ja dodam 2 (kosmetyczne) uwagi:
* brakuje mi możliwości zmiany rozmiaru poszczególnych okien (Input, pliku źródłowego i nagłówkowego),
* podwójne kliknięcie w oknach pliku źródłowego i nagłówkowego zachowuje się jak CTRL+A - nie można zaznaczyć tym sposobem pojedynczego wyrazu
Poza tym (i uwagami Kolegów) - miodzio ;).
Czekamy na kolejne zakładki.
|
|
| Back to top |
|
 |
mirekk36 Poziom 25

Joined: 17 Jun 2006 Posts: 8714 Location: Szczecin
|
#20
20 Dec 2011 11:37 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
O Matko z córką! ale uwag ;) ..... dziękuję - i biorę się do poprawek ;) .... bo rzeczywiście słuszne uwagi.
|
|
| Back to top |
|
 |
pkris74 Poziom 10

Joined: 16 Oct 2005 Posts: 48 Location: Gorzów Wielkopolski
|
#21
21 Dec 2011 11:39 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
Ciekawy program, ale mi brakuje jednej drobnej rzeczy, a mianowicie, aby oprócz pliku binarnego był jeszcze w asm, tak jak mają fonty w bascom.
|
|
| Back to top |
|
 |
mirekk36 Poziom 25

Joined: 17 Jun 2006 Posts: 8714 Location: Szczecin
|
#22
21 Dec 2011 13:13 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
| pkris74 wrote: |
| ... ale mi brakuje jednej drobnej rzeczy, a mianowicie, aby oprócz pliku binarnego był jeszcze w asm, tak jak mają fonty w bascom. |
No ładna mi drobna rzecz ;) .... Ale niestety nie przewiduję pod żadnym względem pisania tego na potrzeby asemblera. Przykro mi.
----------------------------------------------------------
Przy okazji PANOWIE
excray
gbd.reg
Svavo
- nowa wersja programu do pobrania i testowania. Poprawionych zostało mnóstwo rzeczy.
wersja 1.0.0.4
|
|
| Back to top |
|
 |
nsvinc Poziom 22

Joined: 25 Mar 2006 Posts: 2066 Location: otfock
|
#23
21 Dec 2011 13:21 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
heh, ludzie to by chcieli zbascomowić porządne narzedzie dla myślących (tj piszących w C) konstruktorów ;]
Aczkolwiek jakby nie patrzeć, do takiego generatora fontów przydałby się również najpodstawowszy silnik pisany w czystym C, aby potencjalny użytkownik wiedział, jak ma sobie użyć tych plików, które tworzy ten soft. Mam takie wrażenie, że jeszcze nikt poza autorem programu nie wyświetlił nawet jednego znaku w oparciu o pliki z fontem wygenerowanych w tym sofcie...
|
|
| Back to top |
|
 |
mirekk36 Poziom 25

Joined: 17 Jun 2006 Posts: 8714 Location: Szczecin
|
#24
22 Dec 2011 13:19 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
No to jest kolejna wersja: 1.0.0.5
teraz w przypadku konieczności generowania fontu binarnego tworzony jest nawet dodatkowy plik źródłowy w którym możemy sobie przetrzymywać nazwy plików na karcie pamięci SD. Dlaczego ?
powód jest banalny no i znowu kolejne ułatwienie sobie pracy, bo przecież PetitFat nie może korzystać z LFN (długich nazw plików), więc powstaje misz-masz jak się zaczyna to samemu robić. Ale jeśli zdefiniujemy sobie typ wyliczeniowy z ładnymi nazwami oraz dodatkową tablicę nazw i przy okazji program automatycznie poskraca nazwy plików na potrzeby Petit'a to nagle robi się wygoda ;)
np:
enum { _Calibri12pt_italic, _BookmanOldStyle12pt, };
a do tego w oddzielnym pliku tablica nazw:
/* array of short file names for Petit Fat */ char FontNames[][13] PROGMEM = { {"Calib12.bin"}, {"Bookm12.bin"}, };
To w efekcie końcowym program też sam generuje ładnie to w strukturze, proszę zobaczyć:
// Font information for Bookman Old Style 12pt FONT_INFO BookmanOldStyle12ptFontInfo PROGMEM = { 8, // Character height 'a', // Start character 3, // number of pixels of interspace between characters 2, // number of pixels of space character 0, // Character descriptor array 0, // Character bitmap array &FontNames[_BookmanOldStyle12pt][0] // (Pointer) Font filename saved on SD card or 0 (null) otherwise };
Jak widać wprowadziłem jeszcze w tejże strukturze dodatkowy parametr
interspace
który mówi o ilości pixeli dla danego fontu o odstępach między znakami a pozostał parametr
space
który teraz oznacza ilość pixeli dla fontu przeznaczonych na spację.
Mamy więc wszystko co potrzeba nie tylko do prawidłowego narysowania fontu na LCD czy matrixie ale także wszystko do łatwego wyliczenia długości całego napisu w pixelach co z kolei umożliwia ładnie jego wycentrowanie itp
|
|
| Back to top |
|
 |
Google

|
#
22 Dec 2011 13:19 |
|
|
|
|
|
| Back to top |
|
 |
pkris74 Poziom 10

Joined: 16 Oct 2005 Posts: 48 Location: Gorzów Wielkopolski
|
#25
22 Dec 2011 16:29 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
Ja wiem że jak się coś długo udoskonala to czasem można to zepsuć, z twoim programem jest coś nie tak, po włączeniu go sam się po kilku chwilach wyłącza.
|
|
| Back to top |
|
 |
Szymon Tarnowski Poziom 19

Joined: 31 Oct 2008 Posts: 648
|
#26
23 Dec 2011 14:57 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
| mirekk36 wrote: |
| Normalnie szok, a z automatyzacją generowania fontów ma tyle wspólnego co wieszak z gruszką. Zatem jak masz o czymś nie pisać to po prostu nie pisz. Lepiej będzie |
Oj dobrze że mnie ostrzegłeś, to pójdę się bać. Program który wrzuciłem był wykorzystywany do generowania fontów w komercyjnym systemie i już na siebie zarobił wystarczająco że mogłem sobie pozwolić na to żeby go tu wrzucić.
| mirekk36 wrote: |
| Tak wiele osób się tym interesowało ale widocznie tylko ty masz z tym, i to poważny, problem jak widać. A z takim pytaniem lepiej zwróć się o poradę na jakieś forum prawnicze. Bo to także nie ma nic wspólnego z tym tematem. |
No to w takim razie słucham Twojej opinii, skoro jakąś posiadasz. IMHO to temat bardzo powiązany z tym wątkiem. Wydajesz jakiś produkt który został przyjęty i ludzie go używają, Ciebie to nie dotyczy że ktoś łamie prawo, ale może kogoś innego zainteresuje. Wedle mojej wiedzy licencja na fonty jest taka jak na oprogramowanie, że wolno generować przy pomocy nich dokumenty czy loga ale nie wolno sobie ot tak ich przetwarzać do własnych zastosowań.
|
|
| Back to top |
|
 |
mirekk36 Poziom 25

Joined: 17 Jun 2006 Posts: 8714 Location: Szczecin
|
#27
23 Dec 2011 17:51 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
Nie będę polemizował z wynużeniami powyżej.
No, Panowie nowa wersja programu 1.0.0.7 posiada już możliwość generowania fontów o stałej szerokości znaku ;)
Na razie dzieje się to automatycznie po ustawieniu opcji FIXED(X) , wtedy zostaje sprawdzona szerokość najszerszego znaku spośród tych, dla których ma być wygenerowany obraz i do niej zostają wyrównane szerokości pozostałych znaków. Zatem teraz bez większego problemu każdą czcionkę "Proportional" możemy zamienić na czcionkę o stałej szerokości ;) Poniżej przykład działania na dwóch literkach: "i" oraz "W"
a tutaj ten sam font jako typowy Proportional ;)
|
|
| Back to top |
|
 |
nsvinc Poziom 22

Joined: 25 Mar 2006 Posts: 2066 Location: otfock
|
#28
23 Dec 2011 18:15 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
| Szymon Tarnowski wrote: |
| Program który wrzuciłem był wykorzystywany do generowania fontów w komercyjnym systemie i już na siebie zarobił wystarczająco że mogłem sobie pozwolić na to żeby go tu wrzucić. |
Heh, nie wiem czy takie podejście ma sens - e.g. ja pracuje nad softem który ma mi pomóc w pracy. Nie mam oporów przed tym, aby go opublikować jako freeware; niech komus tez pomoze w pracy :]
Albo trzymasz soft dla siebie, bo jest twój i robi coś, co jest specyficzne dla twoich projektów więc nie będziesz się dzielić swoimi patentami, albo po prostu udostępniasz uniwersalne narzędzie.
W sprawie licencji na fonty przecież dostałeś odpowiedź. Robię w tym biznesie już jakiś czas, mam kontakt z prawnikiem, więc podzieliłem się z tobą swoją wiedzą.
Wyjaśniając - zamiana fonta wektorowego na bitmapowy nie jest naruszeniem żadnej ogólnej licencji, o ile w samej licencji danego fonta nie wyjaśnia tego stosowny paragraf. Żaden font freeware lub open source nie zawiera takich restrykcji.
Opublikowany tutaj soft służy do zamiany fontów wektorowych na bitmapowe, i tak naprawdę do niczego innego. Autor tego oprogramowania siłą rzeczy nie odpowiada za użycie oprogramowania w celu łamania obowiązującego prawa - tak jakbyś chciał oskarżyć sprzedawcę noży o to, że ktoś kogoś takim nożem zabił. Bez sensu...
BTW, Mirek nadal nie udostępnił choćby krzty kodu lub opisu implementacji, aby mniej doświadczeni mogli też pobawić się w wyświetlanie fontów bitmapowych, ale cóż, jego program, jego inicjatywa...
|
|
| Back to top |
|
 |
mirekk36 Poziom 25

Joined: 17 Jun 2006 Posts: 8714 Location: Szczecin
|
#29
23 Dec 2011 18:35 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
| nsvinc wrote: |
BTW, Mirek nadal nie udostępnił choćby krzty kodu lub opisu implementacji, aby mniej doświadczeni mogli też pobawić się w wyświetlanie fontów bitmapowych, ale cóż, jego program, jego inicjatywa... |
No dokładnie, ale spokojnie - na wszystko przyjdzie czas - najpierw chcę się uporać po kolei ze wszystkimi swoimi założeniami. Bo już na tym etapie zmienia się jak w kalejdoskopie chociażby z formatem fontu binarnego. Chociaż na tą chwilę jego ostateczny widok wygląda mniej więcej tak:
1-wszy bajt OFZ = offset w pliku do sekcji Bitmaps (obrazy znaków)
kolejne bajty = tablica deskryptorów na żywca z programu bajt po bajcie
kolejne bajty = Bitmaps czyli obrazy znaków
W związku z czym wystarczy odczytać na początku ofset do obrazów znaków, następnie pobrać wartość deksryptora zgodnie ze wzorem:
znak ASCII * 3 ( i tu 1-wszy bajt to szerokość znaku, a 2 kolejne bajty to ofset w obszarze Bitmaps. Pierszy starszy bajt drugi młodszy - tego ofsetu)
potem już skaczemy do pliku w miejsce
OFZ + ofset z tablicy deskryptora i zgodnie z szerokością znaku wykorystujemy pixele ;)
Oczywiście w pamięci FLASH procka pozostaje tylko FONT_CHAR_INFO które zawiera wysokość znaków, interpace, szerokość spacji oraz nazwę skróconą pliku na karcie SD.
Jak to ukończę to pokażę efekty.
|
|
| Back to top |
|
 |
nsvinc Poziom 22

Joined: 25 Mar 2006 Posts: 2066 Location: otfock
|
#30
23 Dec 2011 18:43 Re: Pixel Factory - generator fontów graficznych LCD (do C) |
|
|
|
| mirekk36 wrote: |
| Pierszy starszy bajt drugi młodszy - tego ofsetu |
Duży endian może być kłopotliwy. Zdaję sobie sprawę, że na 8bitowych mikrokontrolerach może być łatwiej przetwarzać bajty gdy są one w tej kolejności, ale dla systemów >=16bit taka kolejność wymusza zbędny narzut, bo przecież łatwiej postawić wskaźnik na u16 w konkretne miejsce bufora i sobie stamtąd przeczytać całe słowo na raz. Tym bardziej, że ta tablica jest w RAMie, a Cortexy obsługują odczyt niewyrównany...
|
|
| Back to top |
|
 |