This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
dydaktyka:cprog:2015:photoshop [2015/11/24 17:04] pkleczek [Dynamiczna alokacja tablicy-obrazu] |
— (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: 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 różnymi problemami, które występują podczas pisania programu z prawdziwego zdarzenia. \\ | ||
- | Będziesz pracować z rodzajem "dokumentacji", zawierającej wskazówki i wytyczne odnośnie wymaganej funkcjonalności. | ||
- | |||
- | 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 kolorów ze skali szarości: \\ | ||
- | {{:dydaktyka:cprog:2015:grayscale.png?nolink|}} | ||
- | ===== Architektura programu ===== | ||
- | |||
- | 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: | ||
- | <code c> | ||
- | #include "bitmap.h" | ||
- | </code> | ||
- | |||
- | 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 (1-bajtowa liczba całkowita bez znaku). | ||
- | |||
- | Alias utworzono z użyciem instrukcji | ||
- | <code c> | ||
- | typedef unsigned char byte; | ||
- | </code> | ||
- | |||
- | ===== Ćwiczenia ===== | ||
- | |||
- | - [[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]] | ||
- | |||
- | |||