Program graficzny w Borland C++ Builder

Chciałbyś utworzyć własny program graficzny? Niezłą aplikację z różnymi narzędziami do fotoretuszu możesz przygotować w ciągu jednego wieczora.

Chciałbyś utworzyć własny program graficzny? Niezłą aplikację z różnymi narzędziami do fotoretuszu możesz przygotować w ciągu jednego wieczora.

Liczone w dziesiątkach, a może nawet setkach programy graficzne oferują różnorodne narzędzia do edycji grafiki rastrowej. Wraz z rosnącą popularnością fotografii cyfrowej coraz bardziej poszukiwane stają się opcje fotoretuszu i poprawiania jakości zdjęć. Warto wiedzieć, że podstawowe narzędzia do fotoretuszu zdjęć są w rzeczywistości bardzo prostymi przekształceniami, a każdy, kto zna podstawy programowania w C++, może takie aplikacje zbudować samodzielnie.

Przedstawimy kilka podstawowych opcji fotoretuszu grafiki rastrowej na przykładzie prostej aplikacji przygotowanej w Borland C++ Builder. Środowisko Borland C++ Builder 6 Personal zamieściliśmy - w pełnej wersji - na krążkach dołączonych do wydania 10/2002 PC Worlda. Własnoręczne modyfikacje przykładowego programu oraz zrozumienie fragmentów kodu źródłowego zamieszczonych w tekście wymagają przynajmniej podstawowej znajomości języka C++ i elementarnych zagadnień grafiki komputerowej, a korzystanie z dołączonych źródeł - pewnego oswojenia ze środowiskiem C++ Buildera.

Okna dialogowe z dwiema miniaturami grafiki umożliwiają wygodne dopasowanie ustawień jasności, kontrastu i nasycenia kolorów.

Okna dialogowe z dwiema miniaturami grafiki umożliwiają wygodne dopasowanie ustawień jasności, kontrastu i nasycenia kolorów.

Do wczytywania i wyświetlania grafik użyjemy standardowych komponentów C++ Buildera: OpenPictureDialog, SavePictureDialog oraz Image. Gdy dodasz do programu komponent Image, ustaw jego właściwość Stretch na True. Dzięki temu bitmapy będą wyświetlane prawidłowo, niezależnie od wymiarów. Jeśli ustawisz wszystkie właściwości w Anchors (akRight, akLeft, akTop, akBottom)na True, rysunki będą odpowiednio skalowane przy zmianie wymiarów okna programu. Kolory poszczególnych pikseli tworzących bitmapę mogą być zapisywane w wielu różnych formatach. Aby uniknąć pomyłek, po wczytaniu grafiki z pliku ręcznie zmienimy format pikseli na pf32bit. W tym formacie każdy kolor reprezentowany jest przez trzy 8-bitowe składowe: czerwoną (red), zieloną (green) i niebieską (blue), z których każda może przyjmować wartości od 0 do 255, co w sumie daje ponad 16,7 miliona kolorów. W dalszej części tekstu składowe koloru nazywać będziemy odpowiednio R, G, B.

//otwórz okno dialogowe wczytywania rysunku

if(OpenDialog->Execute())

{

// wczytaj bitmapę z plikurysunek->Picture->LoadFromFile (OpenDialog ->FileName);

// czy bitmapa została wczytana

if(!rysunek->Picture->Bitmap->Empty)

{

// ustaw format pikseli

rysunek->Picture->Bitmap->PixelFormat = pf32bit;

}

Fotoretusz grafiki wymaga dostępu do każdego piksela tworzącego rysunek. Dostęp ten można uzyskać na dwa sposoby. Pierwszy z nich to odwołanie

TImage *rysunek;

.

.

.

rysunek->Picture->Bitmap->Canvas->Pixels[i][j],

które zwraca wartość typu TColor, zawierającą kolor piksela o współrzędnych [i,j]. Ten sposób jest jednak wyjątkowo czasochłonny i w praktyce nie warto z niego korzystać. Znacznie lepiej wykorzystać następujący:

RGBQUAD *wiersz = (RGBQUAD *) rysunek->Picture->Bitmap->ScanLine[j]

Zmienna wiersz jest wskaźnikiem zawierającym adres pojedynczego wiersza pikseli o numerze j. Poprzez odwołanie wiersz[i] (wskaźnik wiersz możesz w tym wypadku traktować jako rodzaj tablicy) uzyskasz dostęp do piksela [i,j], a przez wiersz[i].rgbRed, wiersz[i].rgbGreen, wiersz[i].rgbBlue do wartości kolejnych składowych koloru.

Ta metoda jest dostatecznie szybka, żeby użyć jej w programie graficznym. Wiele funkcji fotoretuszerskich może się wykonywać długo, gdyż modyfikowany jest każdy piksel obrazka. Na przykład zmiana jasności bitmapy o wymiarach 1024x768 pikseli to ponad 2 miliony operacji, a użycie filtru zmiękczającego to ponad 7 milionów operacji. Warto przygotować oddzielne okna dialogowe, pozwalające użytkownikowi na szybkie wypróbowanie różnych wariantów danej funkcji na miniaturze oryginalnej grafiki. W prezentowanym programie dla większości opcji fotoretuszerskich wyświetlane jest okno z dwiema miniaturami - obrazka oryginalnego i zmodyfikowanego. Dopiero kliknięcie przycisku Zastosuj powoduje przetworzenie oryginalnego rysunku.

Dwie podstawowe opcje dostępne w każdym szanującym się programie do grafiki rastrowej to poprawianie jasności oraz kontrastu grafiki. Równie przydatne są korekcja gamma i dostosowanie nasycenia kolorów. Wiele osób korzysta również z filtrów, takich jak rozmycie czy wyostrzenie. Wszystkie te opcje znajdą się w naszej aplikacji.


Zobacz również