|
Serwis Edukacyjny w I-LO w Tarnowie
Materiały dla uczniów |
Wyjście Spis treści Wstecz Dalej
Autor artykułu: mgr Jerzy Wałaszek |
©2026 mgr Jerzy Wałaszek
|
| SPIS TREŚCI |
|
| Podrozdziały |
W ubiegłych latach na zajęciach koła informatycznego w naszym liceum prowadzone były kursy tworzenia grafiki przy wykorzystaniu biblioteki graficznej SDL. Biblioteka ta jest darmowo dostępna do pobrania z sieci Internet. Sposób instalacji jest w miarę prosty i zależy od używanego środowiska programowania. W przypadku Code::Blocks postępujemy tak:
Gdy biblioteka SDL zostanie już zainstalowana, możesz przejść do tworzenia programów. Za każdym razem procedura jest następująca:
Instalację i projekt możesz przetestować na poniższym pliku:
Jeśli wszystko jest zainstalowane prawidłowo, to powinno się pojawić poniższe okienko z grafiką:
Na kole informatycznym stworzyliśmy prostą bibliotekę graficzną, która pracuje w środowisku SDL i udostępnia wiele funkcji graficznych do rysowania po ekranie. Biblioteka ta składa się z dwóch plików:
newgfx.h - definicje stałych oraz prototypy funkcji bibliotecznych
newgfx.cpp - definicje funkcji bibliotecznych
Oba powyższe pliki najlepiej jest umieścić w katalogu projektowym. Plik nagłówkowy newgfx.h dołączamy wtedy do każdego programu za pomocą dyrektywy preprocesora:
Nie ma już potrzeby osobnego dołączania pliku SDL.h, ponieważ newgfx.h zawiera to dołączenie.
Pliki newgfx.cpp oraz newgfx.h dołączamy do tworzonego projektu za pomocą opcji menu Project/Add files.
Po zainstalowaniu powyższych plików można w Code::Blocks zapisać szablon projektu, który dostępny będzie poprzez Create a new project/User templates.
Biblioteka newgfx pracuje TYLKO w trybie pikseli 32 bitowych. Inne tryby nie są obsługiwane. Nie stanowi to żadnych ograniczeń, ponieważ tryb 32-bitowy daje pełną gamę kolorów. Wszystkie funkcje biblioteczne mają nazwy rozpoczynające się od gfx w celu łatwej identyfikacji w kodzie programu. Większość funkcji występuje w dwóch odmianach - zwykłej, oraz z dodatkowym parametrem alpha, który określa przeźroczystość. Dla alpha = 0 obiekt jest całkowicie przeźroczysty, dla alpha = 256 jest całkowicie nieprzeźroczysty. Wartości pośrednie powodują prześwitywanie tła.
Funkcja wypełnia kolorem fcolor obszar wskazany ziarnem x,y. Obszar jest ograniczony konturem (linią) w kolorze bcolor oraz prostokątem obcinającym screen -> clip_rect. Wszystkie piksele o kolorze różnym od bcolor zostaną pomalowane w obszarze na fcolor.
Funkcja rysuje okrąg o środku w punkcie (xs,ys), promieniu r i kolorze konturu color. Okrąg w całości musi się mieścić na powierzchni graficznej.
Funkcja rysuje okrąg o środku w punkcie (xs,ys), promieniu r i kolorze konturu color. Okrąg jest obcinany do prostokąta screen->clip_rect.
Funkcja rysuje elipsę o środku w punkcie (xs,ys), promieniach rx, ry i kolorze konturu color. Elipsa jest obcinana do prostokąta screen->clip_rect.
Funkcja rysuje odcinek poziomy na obszarze graficznym. Odcinek jest obcinany do prostokąta obcinającego zdefiniowanego w strukturze screen.
Funkcja rysuje odcinek od punktu początkowego (x1,y1) do punktu końcowego (x2,y2) wykorzystując algorytm Bresenhama. Odcinek jest obcinany do prostokąta obcinającego zdefiniowanego w strukturze screen.
Funkcja rysuje odcinek od punktu początkowego ustawionego przez funkcję gfxMoveTo() lub punktu końcowego ostatniego wywołania funkcji gfxLineTo() / gfxClipLineTo() / gfxWuLineTo() / gfxClipWuLineTo() do punktu (x,y). Punkt końcowy (x,y) staje się punktem początkowym dla kolejnego wywołania tej funkcji. Umożliwia to rysowanie łamanych, zbudowanych z odcinków połączonych końcami. Odcinek jest obcinany do prostokąta obcinającego zdefiniowanego w strukturze screen.
Funkcja rysuje odcinek poziomy na obszarze graficznym. Odcinek jest obcinany do prostokąta obcinającego zdefiniowanego w strukturze screen. Kolor jest łączony z tłem za pomocą funkcji OR.
Funkcja rysuje odcinek od punktu początkowego (x1,y1) do punktu końcowego (x2,y2) wykorzystując algorytm Bresenhama. Odcinek jest obcinany do prostokąta obcinającego zdefiniowanego w strukturze screen. Kolor jest dodawany do tła za pomocą funkcji OR.
Funkcja rysuje odcinek od punktu początkowego ustawionego przez funkcję gfxMoveTo() lub punktu końcowego ostatniego wywołania funkcji gfxLineTo() / gfxClipLineTo() / gfxWuLineTo() / gfxClipWuLineTo() do punktu (x,y). Punkt końcowy (x,y) staje się punktem początkowym dla kolejnego wywołania tej funkcji. Umożliwia to rysowanie łamanych, zbudowanych z odcinków połączonych końcami. Odcinek jest obcinany do prostokąta obcinającego zdefiniowanego w strukturze screen. Kolor jest dodawany do tła za pomocą funkcji OR.
Funkcja rysuje jeden punkt na powierzchni graficznej. Jeśli punkt (x,y) znajduje się poza prostokątem obcinającym w strukturze screen, nie będzie rysowany. Kolor jest dodawany do tła za pomocą funkcji OR.
Funkcja rysuje łamaną zdefiniowaną przez listę f. Konstrukcja listy jest opisana przy funkcji gfxFillPoly(). Reaguje na prostokąt obcinania screen -> clip_rect. Kolor jest dodawany do tła za pomocą funkcji OR.
Funkcja rysuje odcinek pionowy na obszarze graficznym. Odcinek jest obcinany do prostokąta obcinającego zdefiniowanego w strukturze screen. Kolor jest łączony z tłem za pomocą funkcji OR.
Funkcja rysuje jeden punkt na powierzchni graficznej. Jeśli punkt (x,y) znajduje się poza prostokątem obcinającym w strukturze screen, nie będzie rysowany.
Funkcja rysuje łamaną zdefiniowaną przez listę f. Konstrukcja listy jest opisana przy funkcji gfxFillPoly(). Reaguje na prostokąt obcinania screen -> clip_rect.
Funkcja rysuje prostokątną ramkę zdefiniowaną strukturą SDL_Rect. Ramka jest obcinana do prostokąta obcinającego w strukturze screen.
Funkcja rysuje odcinek pionowy na obszarze graficznym. Odcinek jest obcinany do prostokąta obcinającego zdefiniowanego w strukturze screen.
Funkcja rysuje odcinek od punktu początkowego (x1,y1) do punktu końcowego (x2,y2) wykorzystując algorytm Xiaolin Wu. Punkty pośrednie są wygładzane. Odcinek jest obcinany do prostokąta obcinającego zdefiniowanego w strukturze screen.
Funkcja rysuje odcinek od punktu początkowego ustawionego przez funkcję gfxMoveTo() lub punktu końcowego ostatniego wywołania funkcji gfxLineTo() / gfxClipLineTo() / gfxWuLineTo() / gfxClipWuLineTo() do punktu (x,y). Punkt końcowy (x,y) staje się punktem początkowym dla kolejnego wywołania tej funkcji. Umożliwia to rysowanie łamanych, zbudowanych z odcinków połączonych końcami. Odcinek jest obcinany do prostokąta obcinającego zdefiniowanego w strukturze screen.
Funkcja rysuje wygładzoną łamaną zdefiniowaną przez listę f. Konstrukcja listy jest opisana przy funkcji gfxFillPoly(). Reaguje na prostokąt obcinania screen -> clip_rect.
Funkcja rysuje elipsę o środku w punkcie (xs,ys), promieniach rx, ry i kolorze konturu color. Elipsa w całości musi się mieścić na powierzchni graficznej.
Funkcja rysuje wypełnione kolorem color koło = o środku w punkcie (xs,ys) i promieniu r. Koło jest obcinane do prostokąta screen->clip_rect.
Funkcja rysuje owal o środku w punkcie (xs,ys), promieniach rx, ry i kolorze konturu color. Owal jest obcinany do prostokąta screen->clip_rect.
Funkcja wypełnia kolorem color obiekt wektorowy zbudowany z listy łamanych. Reaguje na prostokąt obcinania screen -> clip_rect.
Każda łamana rozpoczyna się od liczby określającej liczbę wierzchołków. Jeśli liczba ta ma wartość 0, to oznacza to koniec listy łamanych. Za liczbą wierzchołków następują pary współrzędnych x,y określające położenie wierzchołków na płaszczyźnie graficznej.
Przykład:
Ten obiekt składa się z dwóch łamanych:
Pierwsza łamana posiada trzy wierzchołki: (12,1),
(14,5) i (1,1).
Druga łamana posiada tylko dwa wierzchołki: (5,3) i (4,7).
Ostatnie zero
oznacza koniec listy łamanych.
Listę łamanych można utworzyć w tablicy o odpowiedniej wielkości. Na przykład tak:
Funkcja wypełnia kolorem fcolor obszar wskazany ziarnem x,y. Obszar posiada jednolity kolor oraz jest ograniczony obszarami w innych kolorach i prostokątem obcinającym screen -> clip_rect.
Funkcja zwraca 32 bitowy kod koloru piksela umieszczonego na pozycji x,y powierzchni graficznej. Współrzędne x i y muszą zawierać się w obszarze graficznym.
Funkcja rysuje odcinek poziomy na obszarze graficznym. Odcinek w całości powinien się zawierać w tym obszarze.
Funkcja zwraca tekst z numerem wersji biblioteki graficznej newgfx. Istnieje tylko dla celów testowych w trakcie instalacji oprogramowania.
Funkcja rysuje odcinek od punktu początkowego (x1,y1) do punktu końcowego (x2,y2) wykorzystując algorytm Bresenhama. Punkt początkowy i końcowy musi zawierać się w powierzchni graficznej.
Funkcja rysuje odcinek od punktu początkowego ustawionego przez funkcję gfxMoveTo() lub punktu końcowego ostatniego wywołania funkcji gfxLineTo() / gfxClipLineTo() / gfxWuLineTo() / gfxClipWuLineTo() do punktu (x,y). Punkt końcowy (x,y) staje się punktem początkowym dla kolejnego wywołania tej funkcji. Umożliwia to rysowanie łamanych, zbudowanych z odcinków połączonych końcami. Punkt początkowy i końcowy rysowanego odcinka muszą zawierać się w powierzchni graficznej screen.
Funkcja współpracuje z gfxLineTo() / gfxClipLineTo() / gfxWuLineTo() / gfxClipWuLineTo(). Ustawia punkt początkowy odcinka
Funkcja wypełnia kolorem color obiekt wektorowy zbudowany z listy łamanych. Reaguje na prostokąt obcinania screen -> clip_rect. Kolor jest łączony z tłem za pomocą funkcji OR.
Funkcja rysuje odcinek poziomy na obszarze graficznym. Odcinek w całości powinien się zawierać w tym obszarze. Kolor jest łączony z tłem za pomocą funkcji OR.
Funkcja rysuje odcinek od punktu początkowego (x1,y1) do punktu końcowego (x2,y2) wykorzystując algorytm Bresenhama. Punkt początkowy i końcowy musi zawierać się w powierzchni graficznej. Kolor jest dodawany do tła funkcją OR.
Funkcja rysuje odcinek od punktu początkowego ustawionego przez funkcję gfxMoveTo() lub punktu końcowego ostatniego wywołania funkcji gfxLineTo() / gfxClipLineTo() / gfxWuLineTo() / gfxClipWuLineTo() do punktu (x,y). Punkt końcowy (x,y) staje się punktem początkowym dla kolejnego wywołania tej funkcji. Umożliwia to rysowanie łamanych, zbudowanych z odcinków połączonych końcami. Punkt początkowy i końcowy rysowanego odcinka muszą zawierać się w powierzchni graficznej screen. Kolor jest dodawany do tła funkcją OR.
Funkcja rysuje jeden punkt na powierzchni graficznej. Punkt musi się zawierać w tej powierzchni, tzn jego współrzędne nie mogą wykraczać poza marginesy, w przeciwnym wypadku może dojść do zamknięcia aplikacji z powodu naruszenia praw dostępu do chronionych obszarów pamięci. Kolor jest dodawany do tła funkcją OR.
Funkcja rysuje łamaną zdefiniowaną przez listę f. Konstrukcja listy jest opisana przy funkcji gfxFillPoly(). Łamana w całości musi się mieścić na obszarze graficznym. Kolor jest dodawany do tła funkcją OR.
Funkcja rysuje odcinek pionowy na obszarze graficznym. Odcinek w całości powinien się zawierać w tym obszarze. Kolor jest łączony z tłem za pomocą funkcji OR.
Funkcja rysuje jeden punkt na powierzchni graficznej. Punkt musi się zawierać w tej powierzchni, tzn jego współrzędne nie mogą wykraczać poza marginesy, w przeciwnym wypadku może dojść do zamknięcia aplikacji z powodu naruszenia praw dostępu do chronionych obszarów pamięci.
Funkcja rysuje łamaną zdefiniowaną przez listę f. Konstrukcja listy jest opisana przy funkcji gfxFillPoly(). Łamana w całości musi się mieścić na obszarze graficznym.
Funkcja rysuje prostokątną ramkę zdefiniowaną strukturą SDL_Rect. Ramka w całości musi się zawierać w obszarze graficznym.
Funkcja rysuje odcinek pionowy na obszarze graficznym. Odcinek w całości powinien się zawierać w tym obszarze.
Funkcja rysuje odcinek od punktu początkowego (x1,y1) do punktu końcowego (x2,y2) wykorzystując algorytm Xiaolin Wu. Punkt początkowy i końcowy musi zawierać się w powierzchni graficznej. Punkty pośrednie są wygładzane.
Funkcja rysuje wygładzony odcinek od punktu początkowego ustawionego przez funkcję gfxMoveTo() lub punktu końcowego ostatniego wywołania funkcji gfxLineTo() / gfxClipLineTo() / gfxWuLineTo() / gfxClipWuLineTo() do punktu (x,y). Punkt końcowy (x,y) staje się punktem początkowym dla kolejnego wywołania tej funkcji. Umożliwia to rysowanie łamanych, zbudowanych z odcinków połączonych końcami. Punkt początkowy i końcowy rysowanego odcinka muszą zawierać się w powierzchni graficznej screen.
Funkcja rysuje łamaną zdefiniowaną przez listę f. Konstrukcja listy jest opisana przy funkcji gfxFillPoly(). Łamana w całości musi się mieścić na obszarze graficznym.
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2026 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.