Konwersja (głębi) obrazu do 18-bit.

Forum dotyczące ogólnie pojętego programowania - algorytmów, struktur danych, narzędzi programistycznych, itp - głównie w kontekście komputerów PC.
ODPOWIEDZ
Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Konwersja (głębi) obrazu do 18-bit.

Post autor: gwozdex » 11 mar 2009, 9:59

Witam!
Ponieważ w dziedzinie obróbki obrazu jestem zupełnym laikiem proszę o poradę. Mianowicie potrzebuję napisać program który umożliwi zmiane atrybutów obrazu (popularne formaty *.jpeg, *.gif)
takich jak głębia kolorów (color depth) oraz rozmiar (Resize). O ile z drugim nie powinno byc problemów
to co do pierwszego mam wątpliwości. Sa co prawda dostępne programy jak FastStone oferujące zmianę głębi kolorów ale dostępna jest tylko głębia 8 bitów i 24 bity. Ja zaś potrzebuję 18 bitów (262144 kolory). Sprawdzałem dostępne komponenty w Delphi i VB 6.0 ale nie natrafiłem na zaden trop. Za pomoc z góry dziękuję.
Ps. Jeśli oczywiście znajdzie ktos gotowy program który jednak oferuje konwersje obrazu do 18 bitów to też bedzie super.

aktus
Użytkownik
Posty: 379
Rejestracja: 06 sie 2007, 20:44
Lokalizacja: Tychy

Post autor: aktus » 11 mar 2009, 17:01

18 = 3 (kolory) * 6 (bitów). Chyba wystarczy pokombinować z proporcjami. Kolory są i tak mieszane z 3 podstawowych, a skala jest liniowa, więc nie powinno być większych problemów.

Awatar użytkownika
c4r0
Moderator
Posty: 2152
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 11 mar 2009, 18:31

O ile dobrze zrozumiałem, nie chodzi o ustalenie wartości kolorów tylko o zmianę atrybutów określających głębię w konkretnych formatach plików. To zupełnie co innego.

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 12 mar 2009, 6:30

Witam!
Zgadza się c4r0!
Potrzeba mi przekonwertować obraz 24-bit na obraz zapisany z rozdzielczością 18-bit. tak jak Kolega aktus zauważył po sześć bitów na każdy kolor: 6R+6G+6B

aktus
Użytkownik
Posty: 379
Rejestracja: 06 sie 2007, 20:44
Lokalizacja: Tychy

Post autor: aktus » 12 mar 2009, 9:55

@c4r0: łopatologicznie, ale niepoprawnie - masz 3 adc 8 bitowe po 1 na każdy kolor: czerwony, zielony i niebieski. W sumie dadzą 24 bitową paletę barw. Jeśli chcesz uzyskać paletę barw 18 bitową, to stosujesz 3 przetworniki 6 bitowe i wówczas masz 3 * 6 = 18. W przetworniku 8 bitowym wartość napięcia wchodzącego jest reprezentowana przez liczby z zakresu 0-255, gdzie 0 to brak występowania danego koloru, a 255 to maksymalne nasycenie tego koloru. Przy przetworniku 6 bitowym zakres ten zawiera się pomiędzy liczbami 0 a 63. Trzeba będzie zaokrąglać i tu trzeba się będzie trzymać zaokrąglania albo w górę, albo w dół.

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 12 mar 2009, 10:40

A jak takie cos zrobic w odniesieniu do programu PC??

Awatar użytkownika
c4r0
Moderator
Posty: 2152
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 12 mar 2009, 15:14

Jeszcze raz: o ile dobrze rozumiem nie jest tutaj problemem zamiana wartości opisujących kolory (to chyba jest proste ... ?), tylko ustawienie samego atrybutu w pliku o danym formacie. Nie chodzi o wartości dla poszczególnych pikseli, tylko o to gdzie i jak zapisać w jpegu lub gif-ie że zastosowana paleta jest 18-bitowa. O to chodzi gwozdex?

W ogóle to 18 bitów to dość dziwna wartość. Liczba pikseli musi być wielokrotnością czwórki żeby dało się zapisać dane na całkowitych bajtach.

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 12 mar 2009, 20:33

mam kolorowy wyświetlacz 320x320 TFT który wyświetla obrazy właśnie z 18-bit. rozdzielczością: 6 bitów R, 6 bitów G, 6 bitów B co daje 262 144 kolory. Teraz chcąc przesłać mu taki obraz muszę przekonwertować go z 24-bitów na 18.

Awatar użytkownika
c4r0
Moderator
Posty: 2152
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 12 mar 2009, 21:54

No to już chyba wszystko jasne. Tylko teraz pytanie w czym problem? Moim zdaniem, rozbijasz 24-bitowy kolor na składowe RGB, potem każdą składową dzielisz przez 4 bez reszty - wtedy te składowe możesz już zapisać na 6 bitach. O to chodzi?

Awatar użytkownika
kayron
Użytkownik
Posty: 2090
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 12 mar 2009, 23:08

Pewnie kolegom chodzi tu o wyświetlacze TFT. które faktycznie obcinają z 24 do 18 bitów. jest to robione tam tak że po po prostu ignorowane są 2 najstarsze bit w każdym słowie. Przynajmniej tak to wygląda na poziomie sprzętu. Natomiast w programach konwertujących można już próbować kombinować. Najczęściej po prostu uśrednia się wartość dzieląc przez jakiś tam stały współczynnik, tu 4 jak zaproponował kolega. Ale moim zdaniem nie ma w plikach graficznych atrybutu palety 18-bitowej, zwyczajnie taki standard chyba nie istnieje, przynajmniej ja nigdy nie widziałem pliku o 18bitowej głębi koloru. A rozdzielczości kolorów wyświetalaczy to inna sprawa i nie mieszał bym tych 2 rzeczy. Robi się to po prostu tak że zapisuje się w 24 bitach i przy odczycie uśrednia tę wartość dzieląc wynik przez 4. Najszybciej te dzielenie zrobić przesuwając wartość o 2 bity, chyba w prawo to dzielenie.

alaris
Użytkownik
Posty: 531
Rejestracja: 21 lut 2006, 14:56
Lokalizacja: Gorzow/Poznan

Post autor: alaris » 13 mar 2009, 0:09

kayron pisze:est to robione tam tak że po po prostu ignorowane są 2 najstarsze bit w każdym słowie
chyba najmlodsze...

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 13 mar 2009, 7:38

Witam!
Panowie... Program IrfanView oferuje dość sporo funkcji min. "Change color depth" Ustawia się tam ilośc kolorów ( która u mnie wynosi 2^6= 64) i obaz zostaje przekonwertowany.

[ Dodano: 2009-03-13, 07:38 ]
Dziękuje za pomoc.

ODPOWIEDZ