znaków

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.

Reply to
Viki
Loading thread data ...

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

Reply to
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

Reply to
Sławomir Szczyrba

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.

Reply to
J.F

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

Reply to
Roman

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.