W specyfikacji jest napisane ze 8 bitowe BMP zawiera co najwyzej 256 kolorow w tablicy kolorow do ktorej wskazoja poszczegolne pixele. Moje pytanie dotyczy skąd mozna okreslic dokladna ilosc tych kolorow. Chce uzywac malloca do wczytywania do tablicy , wiec potrzebuje wiedziec dokladnie.
Jesteś pewien, że "co najmniej"? Jak może być więcej kolorów niż 256 zapisanych na 8 bitach?
Co najwyzej. Moj blad.
dandon223 napisał(a):
Co najwyzej. Moj blad.
No to alokuj miejsce na 256 kolorów i już.
Ale potem uzywam wskazniku do pliku zeby zczytywac poszczegolne bajty do struktor i jak za duzo zczytam do tej tablicy to wskaznik bedzie za daleko i wczyta tez poszczegolne pixele a tego przeciez nie chce.
No, ale to gdzieś musi być napisane w nagłówku, albo w DIB, nie? Poczytaj dobrze:
https://en.wikipedia.org/wiki/BMP_file_format
Prawdopodobnie znalazlem ale jest to nie jasno napisane i powinni poprawic. Ale ok. A wiesz moze czy te kolory w color table sa jakos posegregowane. Chcialbym naprzyklad uzyc filtru medianowego. To czy wystarczy obliczyc ta mediane dla tablicy wskaznikow do poszczegolnych kolorow, czy trzeba po kolei dla R G i B i potem znalezc odpowiadajacy kolor w tej tablicy?
Przecież tam na wiki jest wyraźnie w jednej z tabelek:
the number of colors in the color palette, or 0 to default to 2n
Ok. A jak to bedzie dla 16 bitowej i z filterm medianowym? Tez musze na RGB rozdzielic i dopiero w tedy zastosowac ten filtr?
Jakich operacji musze sie nauczyc aby na przyklad z jednego bajta skopiowac 5 pierwszych bitow i zrobic z tego innego bajta?
dandon223 napisał(a):
Jakich operacji musze sie nauczyc aby na przyklad z jednego bajta skopiowac 5 pierwszych bitow i zrobic z tego innego bajta?
Bitowych. W szczególności, pierwszych pięć bitów bajta to:
output = (input & 0xF8) >> 3 /* 0xF8 == 0b1111_1000, ale C nie ma literałów binarnych */