[WinAPI c++] Rozróżnianie bitmap

0

Jak rozróżnić programowo czy plik BMP z paletą kolorów 256-elementową jest kolorowa czy w odcieniach szarości?
Mam każdego RGBQUADa w BITMAPINFO sprawdzać czy R,G i B są sobie równe?
:/
Bo np. w Windowsie (2000) we właściwościach pliku, w zakładce Podsumowanie w - Reprezentacja kolorów - jest - Skala odcieni szarości (dla szarego) lub W formie palety (dla 256 kolorowego)

hiLFe!

0

Tak właśnie robi to Windows (sprawdzone :) ). Jeżeli kolory są szare od 0 do 255 to pokazuje W odcieniach szarości. Qrde nawet człowiek nie wie, że Windows ma tak zaawansowane bajery :D

0

no OK. A jeśli obraz jest BEZ PALETY kolorów? I jeśli poziom szarości zapisany jest za pomocą jednego bajta na piksel? Skąd wiedzieć, że to szary?

0

2 bity dla R,G,B + 2 bity na odcień tych 64kolorów - w sumie 256 kolorów
if (kolor&3) = (kolor>>2)&3 = (kolor>>4)&3 ---> szary pixel, zakładając że bity 6 i 7 to odcień

0
-=mAkAbrAs=- napisał(a)

no OK. A jeśli obraz jest BEZ PALETY kolorów? I jeśli poziom szarości zapisany jest za pomocą jednego bajta na piksel? Skąd wiedzieć, że to szary?

To zależy co rozumiesz przez obraz bez palety... Obraz bez palety kolorów to (przeważnie) obraz RGB-nieskompresowany, 24-bitowy kolor.

--
sapero:
W pliku BMP po BITMAPINFOHEADER jest paleta kolorów RGBQUAD bmiColors[1] (patrz BITMAPINFO) [bitmapę wskazuje bOffBits z BITMAPFILEHEADER].
Teraz dla ilości bitów koloru mamy:
8 The bitmap has a maximum of 256 colors, and the bmiColors member contains up to 256 entries. In this case, each byte in the array represents a single pixel.
24 The bitmap has a maximum of 2^24 colors, and the bmiColors member is NULL. Each 3-byte triplet in the bitmap array represents the relative intensities of blue, green, and red, respectively, for a pixel.

Dla trybów 16- i 32-bitowych znaczenie ma jeszcze wartość biCompression (RGB lub BITFIELDS).

A czy coś takiego jak 8-bitowy (2+2+2+2 ?!!?!) kolor RGB w ogóle istnieje dla BMP?? Tryb 8-bitowy jest trybem indeksowanym, przynajmnije dla Windows DIB BMP...

Jeżeli w pliku jest obraz 8-bitowy bez tablicy kolorów (jak??!!) to nie można wiedzieć jakie są to kolory :) Ale można przypuszczać, że jest to jasność (intensity) tak jak w telewizji czarno-białej. Może być od czarnego do białego ale też np. od czarnego do zielonego.

0

No to ze źródła pewnego wiem, że musi być paleta i właśnie raczej trzeba sprawdzać, czy R==B==G.

Dzięki za odpowiedzi!

0

Oczywiście paleta kolorów dla 8bpp.

1 użytkowników online, w tym zalogowanych: 0, gości: 1