User Tools

Site Tools


dydaktyka:cprog:2015:photoshop

This is an old revision of the document!


Projekt - Fotoszop

Nazwałem ten projekt “Fotoszop” oczywiście ze względu na prawną ochronę nazwy handlowej programu Photoshop firmy Adobe…

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 zaimplementujesz1) 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łą KISS, stąd:

  • program będzie obsługiwał tylko obrazy w odcieniach szarości w 8-bitowej głębi koloru, zapisane w formacie 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:

Architektura programu

Program korzysta z osobnej biblioteki służącej do odczytu i zapisu danych z pliku bitmapy2). 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:

#include "bitmap.h"

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

typedef unsigned char byte;

Ćwiczenia

1)
zobacz znaczenie w SJP PWN
2)
Autorem oryginalnego kodu biblioteki jest Michael Sweet. Kod ten można znaleźć na stronie http://paulbourke.net/dataformats/bmp/
dydaktyka/cprog/2015/photoshop.1448381078.txt.gz · Last modified: 2020/03/25 11:46 (external edit)