User Tools

Site Tools


dydaktyka:cprog:2015:photoshop

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 [2015/12/10 08:14]
pkleczek [Ćwiczenia]
— (current)
Line 1: Line 1:
-====== Projekt - Fotoszop ====== 
- 
-[size=10]Nazwałem ten projekt "​Fotoszop"​ oczywiście ze względu na prawną ochronę nazwy handlowej programu Photoshop firmy Adobe...[/​size] 
- 
-===== Tytułem wstępu... ===== 
- 
-Pierwsze komputery powstały nie jako teoretyczne zabawki, tylko jako odpowiedź na bardzo konkretne problemy: 
-  * Jak sprawnie wykonywać rachunki? 
-  * Pod jakim kątem wystrzelić torpedę, aby trafić poruszający się okręt? 
-  * Jak złamać szyfr wroga? 
- 
-Wychodząc z podobnego założenia chciałbym, umożliwić Ci w ramach przedmiotu "​Programowanie komputerów"​ poćwiczyć pisanie programów służących czemuś bardziej praktycznemu niż wypisywanie ''​%%"​Hello world!"​%%''​ na ekran. 
- 
-===== Idea projektu ===== 
- 
-Program powstały w ramach projektu //​Fotoszop//,​ jak nazwa sugeruje, będzie służył do pracy z obrazami. W ramach kolejnych ćwiczeń laboratoryjnych zaimplementujesz((zobacz znaczenie w [[http://​sjp.pwn.pl/​poradnia/​haslo/​implementowac;​9044.html|SJP PWN]])) fragmenty kodu służące do wczytywania/​zapisu danych obrazu oraz do operowania na pikselach. Umożliwi Ci to wykonywanie takch operacji jak: [[dydaktyka:​cprog:​2015:​photoshop:​exercises:​filtering|rozmycie]] (zmniejszenie ostrości) obrazu, znajdowanie krawędzi na obrazie, tworzenie fraktali -- i co Ci jeszcze przyjdzie do głowy :-) 
- 
-Podczas realizacji projektu zapoznasz się z takimi kwestiami, które występują podczas pisania programu z prawdziwego zdarzenia, jak: 
-  * praca z "​dokumentacją",​ zawierającą wskazówki i wytyczne odnośnie pożądanej funkcjonalności 
-  * opracowanie metody (algorytmu) rozwiązywania problemu 
-  * przełożenie algorytmu na kod programu z uwzględnieniem ograniczeń sprzętowych 
-  * weryfikacja poprawności algorytmu -- zazwyczaj metodą prób i błędów 
-  * tworzenie kodu elastycznego i łatwego w zarządzaniu 
-  * ... 
- 
-Projekt będzie tworzony zgodnie z regułą [[https://​pl.wikipedia.org/​wiki/​KISS_%28regu%C5%82a%29|KISS]],​ stąd: 
-  * program będzie obsługiwał tylko obrazy w odcieniach szarości w 8-bitowej [[https://​pl.wikipedia.org/​wiki/​G%C5%82%C4%99bia_koloru|głębi koloru]], zapisane w formacie [[https://​pl.wikipedia.org/​wiki/​Windows_Bitmap|BMP]] 
-  * pewna część funkcjonalności programu -- wymagająca wiedzy wykraczającej poza ramy przedmiotu -- zostanie dostarczona (przez prowadzącego) 
- 
-Ograniczenie "​obrazy w odcieniach szarości w 8-bitowej głębi koloru"​ pozwala na znaczne uproszczenie zadań -- dzięki temu obraz może być reprezentowany jako dwuwymiarowa tablica wartości z zakresu $[0,255]$. Wartości przykładowych odcieni w skali szarości: \\ 
-{{:​dydaktyka:​cprog:​2015:​grayscale.png?​nolink|}} 
-===== Architektura programu ===== 
- 
-==== Biblioteka "​bmplib"​ ==== 
- 
-Program korzysta z osobnej biblioteki służącej do odczytu i zapisu danych z pliku bitmapy((Autorem oryginalnego kodu biblioteki jest Michael Sweet. Kod ten można znaleźć na stronie [[http://​paulbourke.net/​dataformats/​bmp/​]])). W zależności od laboratorium biblioteka ta zawiera również pewne dodatkowe funkcje (np. służące do tworzenia nowego obrazu wewnątrz programu). 
- 
-Aby móc używać tejże biblioteki, na początku kodu programu znajduje się linia dołączająca jej plik nagłówkowy:​ 
-<code c> 
-#include "​bitmap.h"​ 
-</​code>​ 
-To instrukcja analogiczna do znanego Ci już ''#​include <​...>'',​ a różnica polega na tym, że: 
-  * ''​%%#​include <​file>​%%''​ oznacza "​zacznij szukanie pliku nagłówkowego ''​file''​ w standardowych lokalizacjach",​ natomiast 
-  * ''​%%#​include "​file"​%%''​ oznacza "​zacznij szukanie pliku nagłówkowego ''​file''​ od katalogu zawierającego bieżący plik, a dopiero potem w standardowych lokalizacjach 
- 
- 
-Pliki bitmap, na których operuje program, powinny znajdować się w katalogu ''​imgs''​. \\ 
-Aby załadować inny obraz niż domyślny (''​lena.bmp''​) zmień odpowiednio pierwszy argument funkcji ''​load_bitmap()''​. \\ 
-Podobnie, aby zapisać przetworzony obraz do innego pliku niż domyślny (''​lena-out.bmp''​) zmień odpowiednio pierwszy argument funkcji ''​save_bitmap()''​. 
- 
-==== Typ "​byte"​ ==== 
- 
-Ponieważ zgodnie z ograniczeniami wartość piksela zawiera się w przedziale $[0,255]$, do jego reprezentacji wystarczy jeden bajt -- można użyć więc typu ''​unsigned char''​. 
- 
-Aby jednak intencja programisty była jasna -- że chodzi o piksel -- został zdefiniowany typ ''​byte''​ jako alias dla ''​unsigned char''​. Oznacza to, że zamiast pisać w każdym miejscu ''​unsigned char'',​ można po prostu napisać ''​byte'',​ natomiast dla kompilatora oznacza to dokładnie to samo (jednobajtowa liczba całkowita bez znaku). 
- 
-Alias utworzono z użyciem instrukcji 
-<code c> 
-typedef unsigned char byte; 
-</​code>​ 
- 
-===== Ćwiczenia ===== 
- 
-Realizacja zadań w ramach każdego z ćwiczeń opiera się na uzupełnieniu dostarczonego (przez prowadzącego) kodu projektu. Link do odpowiedniego projektu znajduje się na początku każdego z laboratoriów. ​ 
- 
-Każdorazowo otwórz w //​CodeBlocks//​ **plik projektu** ''​.cbp''​ (a nie sam plik ''​.c''​)! 
- 
-Miejsca w kodzie, które należy uzupełnić zostały opatrzone stosownym komentarzem:​ 
-<code c> 
-/* TODO: Uzupełnij mnie! */ 
-</​code>​ 
-Fragmenty do uzupełnienia znajdują się jedynie w pliku ''​.c''​ danego ćwiczenia. 
- 
-:!: <wrap hi>**Nie zmieniaj niczego w pozostałym kodzie programu!**</​wrap>​ 
- 
-Ćwiczenia są od siebie niezależne,​ a więc na przykład: \\ 
-Początkowy kod źródłowy ćwiczenia nr 2 zawiera funkcjonalność z ćwiczenia nr 1 -- brakuje w nim jedynie tego, o czym mowa w ćwiczeniu nr 2. 
- 
----- 
- 
-  - [[dydaktyka:​cprog:​2015:​photoshop:​exercises:​filtering|Filtracja – Rozmycie obrazu]] 
-  - [[dydaktyka:​cprog:​2015:​photoshop:​exercises:​data_un_packing|Umieszczanie bajtów obrazu w tablicy]] 
-  - [[dydaktyka:​cprog:​2015:​photoshop:​exercises:​dynamic_image_allocation|Dynamiczna alokacja tablicy-obrazu]] 
- 
- 
  
dydaktyka/cprog/2015/photoshop.1449731660.txt.gz · Last modified: 2020/03/25 11:46 (external edit)