znaków

Mar 06, 2012 4 Replies

Witam.



Mam przykładowy program wyświetlający bitmapę na wyświetlaczu siemens S60. Obrazka nie posiadam, mam tylko jego zrzut do tablicy znaków.



Wygląda to tak:



prog_uint16_t color_logo[] = { // Image width: 50px, Height: 50px // Image size: 5000 bytes (Width x Height x 2(word=2bytes)) 0xFFD9, 0xFFFB, 0xFFFD, 0xFFFF, 0xF7FF, 0xEFDF, 0xF7FF, 0xF7FF, 0xF7FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDE, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFE, 0xFFDD, 0xFFBC, 0xFF9C, 0xFFBC, 0xFFBC, 0xFFBC, 0xFFBC, 0xFF5B, 0xFF7B, 0xFF5A, 0xFF7B, 0xFFBC, 0xFF9C, 0xFF7B, 0xFFFC, 0xFFFB, 0xFFFA, 0xFFDB, 0xFFBB, 0xFFBC, 0xFFFE, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7FF, 0xF7FF, 0xF7FF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, * * * * };



Na wyświetlaczu pojawia się przykładowy obrazek. No i próbuję wydedukować jak przejść z obrazka na taki zapis. Jeśli dobrze rozumiem z opisu tablicy obrazek ma rozdzielczość 50x50 pikseli. Przeliczyłem ilość elementów w tablicy i wyszło mi 2496 elementów. Skąd więc zapis: // Image size: 5000 bytes (Width x Height x 2(word=2bytes)) ??



Próbowałem programem "Image converter" zrobić zrzut obrazka 50x50 pix i otrzymywałem zapis: 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, czyli element w tablicy ma 8 a nie 16 bitów jak w przykładzie. Wszystkie próby zakończyły się wyświetleniem krzaków. Jak należy przygotować obrazek, ile bitów na kolor? i jak to potem przekonwertować?



Proszę o jakieś sugestie.



Pozdrawiam.


W dniu 2012-03-06 17:24, Viki pisze:

[...]

50 razy 50 to 2500 pikseli. Czyli tablica powinna mieć 2500 pozycji. Nie pomyliłeś się o 4? A może autor tablicy zaniedbał 4 pikseli - to by były śmieci w rogu (prawym dolnym zapewne).

Ewidentnie jest 16 bitów na piksel. To może być kodowanie 565 (czyli 5 bitów czerwonego, 6 bitów zielonego, 5 bitów niebieskiego). Ale może być dowolne inne...

Ja dla takich celów piszę sobie małe programiki, nie bazuję na ściągnięciach z sieci - szybciej mi idzie. Jeśli kodowanie kolorów jest 565, to w C możesz zastosować makro

#define RGB(r,g,b) (((r) & 0xF8) << 8) | (((g) & 0xFC) << 3) | (((b) &

0xF8) >> 3)

które z 3 liczb 8-bitowych utworzy Ci liczbę szesnastobitową w rzeczonym kodowaniu.

Pozdrowienia, MKi

Klik-klik-klik... To Viki informuje :

Np. tak:

1) Przygotować obrazek o wymaganej wielkości 2) ffmpeg -i <nazwa obrazka> -f rawvideo -pix_fmt rgb565 output.565 3) dowolnym proramikiem przekonwertować pliczek output.565 na plik include (wynalazki typu bin2h czy mój ulubiony - reswrap Fox Toolikit)

Najgorsze co Ci grozi, to konieczność sprawdzenia który bajt jest pierwszy a który drugi...

Sławek

Użytkownik "Viki" napisał w wiadomości

I pewnie jak gdzies doczytasz, to ten telefon mial 65536 kolorow, czyli 2 bajty na piksel.

Nie pomyliles sie przy liczeniu ? Moze jednak 2500 elementow ?

C ma ta wlasciwosc ze niedopelnione tablice wypelnia zerami - ale musialaby miec zadeklarowany rozmiar 2500 elementow. Tu nie ma, wiec nie zachodzi. Zobacz procedure wyswietlania - moze tam jest 50x50 i brakujace bajty sa smieciami, a moze to jest rozmiar naprawde np 52x48

bo zrzucales do takiego formatu. Rozne sa.

1) obejrzyj procedure wyswietlania, pewnie sie sporo dowiesz, 2) jak sie nie dowiesz - poszukaj dokumentacji do wyswietlacza, moze cos ciekawego napisza. 3) i oczywiscie trzeba napisac program, ktory na podstawie obrazka w ogolnie stosowanym formacie graficznym wygeneruje tresc w C

J.

Użytkownik "Viki" snipped-for-privacy@gazeta.pl napisał w wiadomości news:jj5dng$ndd$ snipped-for-privacy@inews.gazeta.pl...

poszukaj "LCD Assistant" kolegi Radosława Kwietnia (na jego stronie leży sporo ciekawych rzeczy).

Pozdrawiam Roman

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required