User Tools

Site Tools


dydaktyka:cprog:2015:photoshop:exercises:data_un_packing

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
dydaktyka:cprog:2015:photoshop:exercises:data_un_packing [2015/12/16 20:35]
pkleczek
— (current)
Line 1: Line 1:
-====== 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: {{:​dydaktyka:​cprog:​2015:​photoshop:​exercises:​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 [[dydaktyka:​cprog:​2015:​arrays#​deklarowanie1|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$: \\ 
-{{:​dydaktyka:​cprog:​2015:​byte_packing.png?​nolink|}} \\ 
-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)