Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Bitmapa - kolorowa? a może odcienie szarości?
Jeż



Typ: neutral
Postów: 55
Zarejestrowany: Mar 2004
Bitmapa - kolorowa? a może odcienie szarości?

Bitmapa jest może ogranym tematem ale czy do końca?

Jak rozróżnić czy wczytany plik np. JPEG jest 24 bitowym kolorowym obrazem, czy też 24 zdjęciem czarno-białym?

13-03-2005 20:11
Pokaż profil Jeż  Wyślij email do Jeż   
hicks
raptor user



Typ: moderator
Postów: 279
Zarejestrowany: Apr 2003

Po nagłówku pliku:

coś o jpeg co znalazłem w swoich zbiorach różnych dziwnych rzeczy:

Format of a JPEG block (all data is in Motorola byte order) :
OFFSET              Count TYPE  Description
0000h                  1 word  Block ID
                                  0FFD8h - JPEG signature block(4 chars="JFIF"
                                  0FFC0h - JPEG color information
                                  0FFC1h - JPEG color information
0002h                  1 word  Block size in bytes, without ID word.

Format of JPEG color information (motorola byte order) :
OFFSET              Count TYPE  Description
0000h                  1 byte  1=Grayscale image
0001h                  1 word  Height
0003h                  1 word  Width

Another try for JPEG identification could be this one :
OFFSET              Count TYPE  Description
0000h                  1 dword  ID=FFD9FFE0h
                                ID=FFD8FFE0h
                                Big endian JPEG file (Intel)
                                ID=E0FFD8FFh
                                Little endian JPEG file (Motorola)


oraz coś o plikach BMP:
OFFSET              Count TYPE  Description
0000h                  2 char  ID='BM' - BitMap
                                OS/2 also supports the following IDs :
                                ID='BA' - Bitmap Array
                                ID='CI' - Color Icon
                                ID='CP' - Color Pointer (mouse cursor)
                                ID='IC' - Icon
                                ID='PT' - Pointer (mouse cursor)
0002h                  1 dword  Filesize of whole file
0006h                  4 byte  reserved
000Ah                  1 dword  Offset of bitmap in file
                                ="BOF"
000Eh                  1 dword  Length of BitMapInfoHeader
                                The BitMapInfoHeader starts directly after
                                this header.
                                12 - OS/2 1.x format
                                40 - Windows 3.x format
                                64 - OS/2 2.x format
0012h                  1 dword  Horizontal width of bitmap in pixels
0016h                  1 dword  Vertical width of bitmap in pixels
001Ah                  1 word  Number of planes
001Ch                  1 word  Bits per pixel ( thus the number of colors )
                                ="BPP"
001Eh                  1 dword  Compression type, see ALGRTHMS.txt for descrip-
                                tion of the different types
                                0 - none
                                1 - RLE 8-bit/Pixel
                                2 - RLE 4-bit/Pixel
0022h                  1 dword  Size of picture in bytes
0026h                  1 dword  Horizontal resolution
002Ah                  1 dword  Vertical resolution
002Ah                  1 dword  Number of used colors
002Ah                  1 dword  Number of important colors
0036h                  ? rec    Definition of N colors
                                N=1 shl "BPP"
                        1 byte  Blue component
                        1 byte  Green component
                        1 byte  Red component
                        1 byte  Filler
"BOF"                  ? byte  Image data


_____________________________________________
TLHW Clan member

14-03-2005 12:29
Pokaż profil hicks  Wyślij email do hicks   Odwiedź stronę hicks       2511367
Jeż



Typ: neutral
Postów: 55
Zarejestrowany: Mar 2004

Dzięki hicks - czuję, że to jest to.

Informację o nagłówku BMP miałem, natomiast nie miałem takiej informacji o JPGach.

14-03-2005 19:16
Pokaż profil Jeż  Wyślij email do Jeż   
Jeż



Typ: neutral
Postów: 55
Zarejestrowany: Mar 2004

Niestety do bani z tym nagłówkiem pliku.
Poexperymentowałem trochę, skorzystałem też z gotowych wivierów graficznych i niestety nie jest tak dobrze jak by się mogło wydawać.

Dla obu rodzajów plików w nagłówku jest zapisane, żę są to pliki o modzie koloru 24-bity i że brak palety kolorów.

Problem obszedłem licząc ile jest kolorów w obrazie - jeżeli nie przekracza 256 i składowe RGB są sobie równe - obraz jest szaro-biały.

Wadą tego rozwiązania jest jednak to, że trzeba sprawdzać całą bitmapę, co przy dużych obrazach (np: skany fotografii dobrej jakości) niestety twa chwilkę.

19-03-2005 12:43
Pokaż profil Jeż  Wyślij email do Jeż   
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Jeśli chodzi o bitmapy 24-bitowe to nie ma innej możliwości niż ręczne sprawdzenie każdego pixela. "Odcienie szarości" to jedynie ludzkie wyobrażenie - dla komputera są to wartości niczym nie różniące się od "kolorowych". Natomiast jeśli chcesz sobie ułatwić, to podpowiem, ze nie musisz liczyć ile jest kolorów. Zauważ, że tylko odcienie szarości mają wszystkie trzy wartości (R,G,B) równe, wieć jest to warunek dostateczny.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

21-03-2005 05:52
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Jeż



Typ: neutral
Postów: 55
Zarejestrowany: Mar 2004

Marcin_an masz rację - ale nie do końca.

Sprawdzając liczbę kolorów mam szansę skrócić sprawdzanie - jeżeli ich liczba przekroczy 256 - dalszej części obrazu mogę już nie sprawdzać.

21-03-2005 19:28
Pokaż profil Jeż  Wyślij email do Jeż   
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Ale jeśli będziesz liczył kolory, to potem i tak będziesz musiał liczyć czy wszystkie piksele są szare. Czyli się to nie opłaca. Musi być nie wiecej niż 256 - to warunek konieczny. Ale nie wynika z niego absolutnie nic, gdy okaże się, że kolorów jest mniej niż 256. Poza tym sprawdzanie piksel po pikselu nie jest znów tak pracochłonne. To tylko kilka MB w sumie,


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

21-03-2005 19:31
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Wszystkich odpowiedzi: 6 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1