Jak policzyć rozmiar nieskompresowanego obrazu – wzór z rozdzielczości i głębi kolorów oraz zamiana bitów na kilobajty.
Głębia kolorów to liczba bitów przypadająca na jeden piksel. Im więcej bitów, tym więcej możliwych barw: 1 bit daje 2 kolory, 8 bitów – 256, a 24 bity – ponad 16 milionów. Ta ostatnia wartość to popularny true color, po 8 bitów na każdą składową RGB.
Liczbę dostępnych kolorów liczy się jako 2 do potęgi liczby bitów. Działa to też w drugą stronę: żeby zapisać 256 kolorów, potrzeba 8 bitów, bo 2 do potęgi 8 to dokładnie 256.
Stąd wynika wzór na rozmiar obrazu bez kompresji: szerokość razy wysokość razy głębia kolorów. Wynik wychodzi w bitach, więc trzeba go jeszcze podzielić przez 8, żeby dostać bajty.
Policzmy rozmiar obrazu 800 na 600 pikseli w 24-bitowym kolorze:
Cała trudność tkwi w konsekwentnym przeliczaniu jednostek. Warto zapisywać każdy krok osobno.
funkcja rozmiar_w_bajtach(szerokosc, wysokosc, bity_na_piksel): piksele ← szerokosc * wysokosc bity ← piksele * bity_na_piksel zwróć bity div 8
To jedno z najczęściej powtarzanych obliczeń w całym dziale. Zadanie podaje rozdzielczość i głębię, a prosi o rozmiar w konkretnej jednostce – i punkt przepada najczęściej na przeliczaniu jednostek, nie na samym wzorze.
Bywa też wariant odwrotny: dany rozmiar pliku i rozdzielczość, trzeba wyznaczyć głębię kolorów. Wtedy wzór przekształca się, dzieląc rozmiar w bitach przez liczbę pikseli.
Osiem, bo 2 do potęgi 8 daje dokładnie 256. Analogicznie 16 kolorów wymaga 4 bitów.
Bo formaty stosują kompresję. Wzór podaje rozmiar surowych danych – tyle zajmowałby obraz zapisany piksel po pikselu, bez żadnego upakowania.
Zwykle 24 bity koloru plus 8 bitów kanału przezroczystości. Liczba widocznych barw pozostaje taka sama jak przy 24 bitach.
Zagadnienia z tego samego obszaru matury – warto je powtórzyć razem: