User Tools

Site Tools


dydaktyka:cprog:2015:photoshop:exercises:data_un_packing

This is an old revision of the document!


Umieszczanie bajtów obrazu w tablicy

W tym ćwiczeniu poćwiczysz zmianę danych z reprezentacji wskaźnikowej na reprezentację tablicową.

Do realizacji zadań pobierz i rozpakuj folder projektu: fotoszop-ex2.zip
Podczas realizacji zadań wykorzystaj ten projekt jako szkielet swojego programu.

Teoria

Format graficzny BMP stosuje upakowanie pikseli obrazu wierszami, w “paczkach” o rozmiarze będącym wielokrotnością 4 bajtów. Stąd w naszym przypadku, jeśli szerokość obrazu nie jest wielokrotnością 4, dodana zostanie odpowiednia ilość bajtów wyrównania. Paczki te występują jedna po drugiej, w ciągu.

Rozmiar pojedynczej paczki wynosi $$\mbox{RowSize} = \left\lfloor\frac { \mbox{BitsPerPixel} \cdot \mbox{ImageWidth} + 31 }{32} \right\rfloor \cdot 4$$ przy czym w naszym przypadku $\mbox{BitsPerPixel} = 8$ (takie jest jedno z założeń projektowych).
Zapis $\left\lfloor x \right\rfloor$ oznacza podłogę liczby $x$, czyli największą liczbę całkowitą nie większa od $x$.

Jak wspomniano przy okazji deklarowania tablic wielowymiarowych, komputer przechowuje w pamięci tablicę dwuwymiarową (perspektywa tablicowa) w sposób liniowy – jako kilka następujących po sobie tablic jednowymiarowych (perspektywa wskaźnikowa).

Oto przykład takiego wyrównania dla obrazu o wymiarach $h \times w = 3 \times 2$:

przy czym $$\mbox{RowSize} = \left\lfloor\frac { \mbox{BitsPerPixel} \cdot \mbox{ImageWidth} + 31 }{32} \right\rfloor \cdot 4 = \left\lfloor\frac { 8 \cdot 2 + 31 }{32} \right\rfloor \cdot 4 = \left\lfloor 1,46875 \right\rfloor \cdot 4 = 1 \cdot 4 = 4$$

Zadanie PTR2MAT

  • Uzupełnij kod funkcji load_bitmap() tak, aby poprawnie przepisał wartości pikseli przechowywanych w miejscu wskazywanym przez bitmapBytes (zawierającej wyrównane dane) do tablicy image.
  • Uzupełnij kod funkcji save_bitmap() dokonując operacji odwrotnej – przepisz wartości pikseli przechowywanych w tablicy image do miejsca wskazywanego przez bitmapBytes.
    Pamiętaj o nadaniu bajtom wyrównania wartości 0!
dydaktyka/cprog/2015/photoshop/exercises/data_un_packing.1450294525.txt.gz · Last modified: 2020/03/25 11:46 (external edit)