Programowanie
Programowanie grafiki
Programowanie grafiki
Michał Sobczak
Podstawowe techniki programowania grafi ki są dostępne z poziomu wielu języków programowania. W
artykule skupimy się na wykorzystaniu języków PHP i Java do generowania obrazów i manipulowania
nimi. Wspomnimy także o technikach programowania grafi ki w języku assembler.
ematem tego artykułu jest programowanie znaczeń będziemy mieli problem w ocenie ich rzeczywi-
grafiki w językach PHP, Java oraz assembler. stej przydatności.
Na następnych kilku stronach będziemy zaj-
Tmowali się biblioteką GD, służącą do gene-
rowania obrazów i wykonywania na nich różnych mani-
pulacji. Opanujemy ponadto umiejętność tworzenia gra-
fiki z użyciem platformy J2ME, wykorzystującej język
Java, przeznaczonej na urządzenia przenośne z ograni-
czoną ilością pamięci (np. telefony komórkowe). Na sa-
mym jednak początku zajmiemy się językiem assembler
i przerwaniami układów graficznych.
Wybór technologii
Chcąc wybrać odpowiednie narzędzie, które spełniało
będzie swoje zadania, mamy do dyspozycji szereg mniej
lub bardziej skomplikowanych rozwiązań. Na rynku do-
stępnych jest przynajmniej kilkanaście technologii po-
zwalających w różny sposób generować i manipulować
grafiką komputerową. Na samym początku naszej przy-
gody z grafiką powinniśmy zdecydować, czym chcemy
się zajmować. Jest to kwestia bardzo istotna ze względu
na mnogość rozwiązań. Nie znając ich domyślnych prze- Rysunek 1. Paleta kolorów
48 czerwiec 2008
linux@software.com.pl
Programowanie
Programowanie grafiki
Z pewnością każdy czytelnik zna lub korzystają użytkownicy kompilatora GCC, duża odpowiedzialność. Należy dołożyć sta-
przynajmniej słyszał o języku programo- gdzie jest możliwość tworzenia tak zwa- rań aby poznać duży materiał wiedzy, wyma-
wania PHP. Jest to bardzo popularna meto- nych wstawek assemblerowych. gany by rozpocząć w pełni pracę programi-
da tworzenia dynamicznych aplikacji inter- Programowanie w językach assembler styczną.
netowych i nie tylko. Zapewne mniej osób wymaga znajomości zasad funkcjonowania Zatem programowanie grafiki w dia-
słyszało o bibliotece GD. Jest to rozszerze- sprzętu komputerowego z którego korzysta- lekcie Intel x86, który jest względnie prost-
nie interpretera PHP o funkcje związane z my. Jest to zarówno wada jak i zaleta. Zna- szy do opanowania od AT&T, nie jest naj-
grafiką. Jeśli chcemy więc tworzyć grafi- jomość mechanizmów rządzących proceso- prostszym rozwiązaniem. Musimy wiedzieć
kę bezpośrednio na stronach internetowych, rem, kartą graficzną itp., to duża zaleta ale i czym jest przerwanie, rejestr, jak działa-
PHP z biblioteką GD jest idealnym rozwią-
zaniem.
Mając na uwadze duże możliwości oraz
nieograniczoną niemal przenośność kodu
języka Java, warto zainteresować się tak-
że tą technologią. Język Java, a dokładniej
platforma J2ME, odgrywa znaczącą rolę w
naszym codziennym życiu. Zapewne każdy
posiadacz w miarę nowoczesnego telefonu
komórkowego zetknął się z aplikacji stwo-
rzonymi w języku Java. Są to takie aplika-
cje jak gry lub programy użytkowe. Jeśli
naszym celem jest stworzenie przenośnej
aplikacji graficznej, naszym wyborem po-
winna być platforma J2ME.
Na samym końcu naszego zestawienia Rysunek 2. Rysowanie linii
plasuje się język assembler. Na podstawie
moich doświadczeń związanym z tym roz-
wiązaniem, muszę stwierdzić że jest to du-
że wyzwanie zarówno pod względem moż-
liwości, jak i dużego poziomu skompliko-
wania. Przeznaczeniem tej technologii jest
programowanie niekoniecznie przenośnej,
ale za to bardzo wydajnej grafiki. Każde
zatem rozwiązanie ma swoje wady i zale-
ty, a przede wszystkim domyślne zastoso-
wanie. Wybierając najodpowiedniejsze roz-
wiązanie trzeba mieć na uwadze jego prze-
znaczenie.
x86 Assembler
Języki klasy assembler to zbiór języków ni-
skiego poziomu przeznaczonych do tworzenia
aplikacji operujących tak zwanymi mnemo-
nikami, będącymi podstawowymi operacja-
mi manipulacji na danych. Języki assembler Rysunek 3. Podstawowe możliwości graficzne
mają swoje reprezentacje dla różnych typów
procesorów. W obrębie pojedynczych jedno-
stek procesorowych wyróżniamy ponadto róż-
ne dialekty języka assembler.
Procesory wykorzystywane w kompu-
terach typu PC to procesory klasy x86. W
środowisku Linuksa rozpowszechniony jest
kompilator (wraz z aplikacją łączącą zwaną
linker) o nazwie NASM (The Netwide As-
sembler). NASM korzysta ze składni firmy
Intel. Alternatywnym dialektem jest dia-
lekt firmy AT&T, wykorzystywany w rów-
nie popularnym assemblerze o nazwie GNU
Assembler (aplikacja as). Ze składni AT&T Rysunek 4. Wizualizacja gry wąż
www.lpmagazine.org 49
Programowanie
Programowanie grafiki
Listing 1. Gra wąż
org 7c00h jne a4
%macro punkt 2 a4:
mov ah, 12 cmp ah, 50h
mov bh, 0 je dol
mov dx, %1 jne sprawdz
mov cx, %2
mov al, 3
int 10h
%endmacro
prawo:
%macro punkt_2 0 punkt_kasujacy
mov ah, 12 times 4 inc cx
mov bh, 0 punkt_2
mov al, 3 mov word [poz_punkt_y], dx
int 10h mov word [poz_punkt_x], cx
%endmacro jmp sprawdz
%macro punkt_kasujacy 0 lewo:
mov ah, 12 punkt_kasujacy
mov bh, 0 times 4 dec cx
mov al, 4 punkt_2
int 10h mov word [poz_punkt_y], dx
%endmacro mov word [poz_punkt_x], cx
jmp sprawdz
gora:
start: punkt_kasujacy
mov ax, 0b800h times 4 dec dx
mov es, ax punkt_2
mov word [poz_punkt_y], dx
mov word [poz_punkt_x], cx
mov ah, 0 jmp sprawdz
mov al, 4
int 10h dol:
punkt_kasujacy
punkt 100, 160 times 4 inc dx
mov word [poz_punkt_y], 100 punkt_2
mov word [poz_punkt_x], 160 mov word [poz_punkt_y], dx
mov word [poz_punkt_x], cx
sprawdz: jmp sprawdz
mov ah, 0
int 16h
xor ah, ah
a1: int 16h
cmp ah, 4Dh
je prawo mov bx, 40h
jne a2 mov ds, bx
mov word [ds:72h], 1234h
a2: jmp 0ffffh:0000h
cmp ah, 4Bh
je lewo times 510 - ($ - start) db 0
jne a3 dw 0aa55h
poz_punkt_x dw
a3: poz_punkt_y dw
cmp ah, 48h
je gora
50 czerwiec 2008
Programowanie
Programowanie grafiki
my na liczbach binarnych oraz szestnast- dane z odpowiednich rejestrów i przerywa- modyfikacje tej aplikacji nie można by-
kowych itp. my działanie sprzętu powodując, że opera- łoby stworzyć podstaw do budowy syste-
Nie jest zadaniem tego artykułu, by na- cje wykonywane na klawiaturze sterują po- mu operacyjnego. Odpowiedz jest prosta
uczyć każdego programować w języku as- ruszaniem się punktu, który możemy na- można. Jednak ilość szczegółów niezbęd-
sembler, ale jedynie uzmysłowić jego moż- zwać wężem. Wąż ten pozostawia za sobą nych do opanowania jest dosyć duża: za-
liwości w granicach programowania gra- ślad z innych punktów. rządzanie pamięcią, wielowątkowość, in-
fiki. Jak widać ilość logiki służącej do kon- terfejs graficzny, wiersz poleceń i wiele in-
Tworząc aplikacje w języku assem- trolowania zachowania gry jest ograni- nych. Nie jest to jednak niemożliwe (patrz
bler, tak naprawdę mamy nieograniczone czona do minimum. Najważniejszym jed- GNU Linux).
możliwości działania. Jedynym rzeczywi- nak punktem tej aplikacji jest fakt, że aby
stym ograniczeniem są możliwości sprzę- uruchomić grę nie jest wymagane posiada- Platforma J2ME
tu oraz nasze umiejętności. Możemy ko- nie żadnego systemu operacyjnego. Aplika- Język Java to obecnie jedno z najbardziej
rzystać z procesora, pamięci operacyjnej, cje możemy nagrać na dyskietkę jako tak popularnych rozwiązań w programowaniu
dysków, kart rozszerzeń, urządzeń wejścia zwany bootsector i uruchamiać na każdym aplikacji zarówno z przeznaczeniem na pra-
i wyjścia (klawiatura, mysz, monitor) i wie- komputerze. cę stacjonarną jak i rozwiązania sieciowe.
lu innych. Tak naprawdę tworząc grafikę w Dociekliwi czytelnicy zapewne już za- Dzieje się tak, gdyż platforma języka Ja-
każdy inny sposób wykorzystujemy pośred- chodzą w głowę, czy przypadkiem poprzez va jest najbardziej uniwersalnym środowi-
nio język assembler i kody maszynowe pro-
cesora. Korzystamy bowiem z systemu ope-
racyjnego, którego najbardziej podstawowe
elementy zostały napisane w językach kla-
sy assembler. Każde działanie sprowadza
się do tego samego wyniku, do kodu ma-
szynowego procesora.
Nawiązując do kodu z grą typu wąż
(patrz Listing 1.) zauważamy, że korzysta-
jąc z zaledwie kilku instrukcji jesteśmy w
stanie napisać pełnoprawną grę. Pobieramy
Rysunek 6. Przykład osadzania tesktu
Listing 2. Szablon aplikacji platformy J2ME
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
public class Test extends MIDlet implements CommandListener {
public Test() {
}
public void startApp() {
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
public void commandAction(Command c, Displayable d) {
}
}
Rysunek 5. Wynik działania przykładowej aplikacji
www.lpmagazine.org 51
Programowanie
Programowanie grafiki
skiem. Motto firmy Sun, twórcy języka Ja-
Listing 3. Aplikacja na platformie J2ME
va, brzmi kompiluj raz, uruchamiaj wszę-
dzie. Jest to chyba najbardziej trafne okre-
import javax.microedition.lcdui.*; ślenie odnośnie tej technologii.
Wyróżniamy trzy podstawowe platformy
import javax.microedition.midlet.MIDlet; języka Java. Jest to przede wszystkim platfor-
ma J2SE rozpowszechniana głównie jako JRE.
public class DrugiMIDlet extends MIDlet { Należy rozróżnić środowiska JRE i JDK.
Display display; Pierwsze, czyli JRE, jest to środowisko
public DrugiMIDlet() { } uruchomieniowe. Jego posiadanie jest wyma-
gane, aby aplikacje stworzone w języku Ja-
public void startApp() { va mogłby być uruchamiane. Natomiast śro-
display = Display.getDisplay(this); dowisko JDK jest zestawem narzędzi pro-
display.setCurrent(new Ekran("J2ME rzadzi")); gramistycznych przeznaczonych do tworze-
} nia aplikacji uruchamianych pózniej w JRE.
J2SE umożliwia tworzenie aplikacji Java
public void pauseApp() { } Web Services oraz zwykłych aplikacji. J2SE
public void destroyApp(boolean unconditional) { } jest podstawą dla platformy J2EE. Platforma
public void commandAction(Command c, Displayable d){ } J2EE przeznaczona jest do tworzenia aplika-
cji w architekturze wielowarstwowej z wyko-
private class Ekran extends Canvas implements CommandListener { rzystaniem modelu komponentowego EJB.
String label = "Tekst domyslny"; Ostatnią platformą, która interesuje nas
int elipseWidth = 90; najbardziej, jest platforma J2ME. Jest to śro-
int screenWidth, screenHeight; dowisko przeznaczone dla urządzeń z ograni-
czoną ilością pamięci oraz z wolniejszymi jed-
public Command opcjaWyjscia = new Command("Zamknij", Command.EXIT, 1); nostkami centralnymi. Przykładem są telefony
komórkowe oraz palmtopy. J2ME to tak na-
public Ekran(String txtlab) { prawdę okrojony zestaw klas platformy J2SE.
label = txtlab; Podczas programowania aplikacji, nieko-
screenWidth = getWidth(); niecznie jedynie aplikacji graficznych, powin-
screenHeight = getHeight(); niśmy zdawać sobie sprawę z ograniczeń wy-
addCommand(opcjaWyjscia); nikających z zastosowanego sprzętu. Powinni-
setCommandListener(this); śmy także opanować takie terminy jak CLDC
} oraz CDC. Nas jako użytkowników telefonów
komórkowych zdecydowanie bardziej intere-
protected void paint(Graphics g) { suje termin CLDC oznaczający urządzenia z
g.setColor(247, 223, 62); ograniczonym dostęp do połączeń zewnętrz-
g.fi llRect(0, 0, screenWidth, screenHeight); nych. CLDC jest terminem oznaczającym
g.setColor(0, 0, 0); tak zwaną konfigurację. Wyróżniamy ponadto
g.drawString("(" + screenWidth + ", " + screenHeight + ")", profile, determinujące specyficzny dodatkowy
screenWidth, screenHeight, g.BOTTOM|g.RIGHT); zestaw klas dla danego urządzenia.
g.setColor(0x70000); Specyfikacja CLDC wymaga przynajm-
g.drawString(label, screenWidth/2, screenHeight/2, niej 120 kB pamięci RAM na przechowywa-
g.HCENTER|g.TOP); nie specyfikacji profilu MIDP oraz 32 kB na
g.setColor(255, 0, 0); stos i 8 kB na pamięć nieulotną. Dalsza spe-
g.fi llArc(screenWidth/2 elipseWidth/2, cyfikacja nakłada wymóg posiadania wy-
screenHeight/2 elipseWidth/2, świetlacza o wymiarach 96 na 54 pikseli, kla-
elipseWidth, elipseWidth/2, 20, 220); wiatury alfanumerycznej oraz implementacji
} protokołu HTTP 1.1.
Jak widać, od strony technicznej wyma-
public void commandAction(Command c, Displayable d) { gania sprzętowe są dosyć ograniczone. Wią-
if (c == opcjaWyjscia) { żę się z tym niewielka wydajność aplikacji
destroyApp(true); tworzonych za pomocą J2ME i uruchamia-
notifyDestroyed(); nych na urządzeniach przenośnych. Najbar-
} dziej rozpowszechnionym połączeniem jest
} CLDC i MIDP, co oznacza większość nowo-
} czesnych telefonów komórkowych z obługą
} języka Java. Aplikacje tego typu nazywamy
tak zwanymi midletami.
52 czerwiec 2008
Programowanie
Programowanie grafiki
Niezbędne narzędzia w J2ME
Aby rozpocząć przygodę z programowa-
niem na platformie J2ME konieczne jest
zainstalowanie Sun Java Wireless Toolkit
for CLDC oraz posiadanie urządzenia mo-
bilnego z obsługą języka Java. Alternatyw-
nie można wykorzystać emulator OTA Pro-
visioning, który potrafi skutecznie zastą-
pić telefon komórkowy. Należy mieć tak-
że zainstalowaną platformę J2SE oraz edy-
tor programistyczny z funkcją kompilacji
kodu. Na użytkowników środowiska Net-
Beans czeka odpowiedni zestaw wtyczek
do projektowania przenośnych interfejów.
Ponadto użytkownicy NetBeans nie muszą
martwić się o konieczność odpowiedniego
rozmieszczenia plików z kodem zródłowym
oraz dołączeniem niezbędnych bibliotek.
Jest to bardzo wygodne rozwiązanie.
Pomimo ułatwień, jakie daje nam śro- Rysunek 7. Grafika wgrana do edytora zdjęć
dowisko NetBeans, istotne jest aby odpo-
wiednio rozeznać się w tworzeniu przeno-
śnych aplikacji graficznych od podstaw.
Szablon najprostrzej aplikacji graficznej
na platformie J2ME zaprezentowany jest
na Listingu 2.
Szablon ten uświadamia nam, że two-
rzenie aplikacji J2ME to nie tylko wybie-
ranie odpowiednich komponentów z palety
w środowisku NetBeans, ale także szkielet
aplikacji i obsługa podstawowych zdarzeń.
Widzimy także, że aby stworzyć przenośną
aplikacją niezbędne jest tak zwane zaim-
portowanie odpowiednich klas na począt-
ku naszej aplikacji.
Musimy także napisać kilka metod, które
Rysunek 8. Wynik działania funkcji negatywu
są wymagane aby aplikacja została skompilo-
wana i uruchomiona. Odpowiadają one za roz-
poczęcie, przerwanie oraz zakończenie działa-
nia aplikacji.
Przykładowa aplikacja platformy J2ME
Naszym przykładem odnośnie zastosowa-
nia platformy J2ME w tworzeniu aplika-
cji graficznych będzie prosty formularz za-
wierający kolorowe tło, osadzony tekst oraz
grafikę narysowaną za pomocą odpowied-
nich funkcji graficznych. Ponadto aplikacja
umożliwiała będzie obsługę zdarzenia za-
kończenia działania aplikacji.
Jak widać, nasza aplikacja (patrz Li-
sting 3.) wykorzystuje wcześniej zaprezen-
towany szablon aplikacji (patrz Listing 2.).
Aplikacja DrugiMIDlet wykorzystuje klasy
MIDlet, Display, Canvas oraz CommandLi-
stener, które są w stanie zapewnić naszej
aplikacji pełne jej działanie począwszy od
logiki aplikacji poprzez wyświetlanie ele-
Rysunek 9. Sześciany
mentów graficznych na płótnie, kończąc
www.lpmagazine.org 53
Programowanie
Programowanie grafiki
na obsłudze zdarzeń generowanych przez kolorem oraz wydrukowany pod nią napis. Język PHP
użytkownika aplikacji. Lewy górny przycisk telefonu, a dokładniej Język PHP wraz z interpreterem tworzą
Na załączonym rysunku prezentują- emulatora telefonu komórkowego, jest od- bardzo dobry zestaw narzędzi do tworzenia
cym wynik działania naszej aplikacji wi- powiedzialny w naszej aplikacji za obsługę aplikacji internetowych i nie tylko. W śro-
dać, że otrzymaliśmy elipsę wypełnioną zdarzenia zakończenia działania aplikacji. dowisku Open Source jest to jedna z pod-
stawowych technologii programistycznych.
Listing 4. Osadzanie tekstu Nie ulega wątpliwości, że programowanie z
wykorzystaniem PHP jest o wiele prostsze
function imageString($fi lename) { i przejrzystsze od programowania w języ-
$commentstring = "tekst do osadzenia"; kach assembler lub Java. Dzieje się tak, po-
$h_im = imagecreatefromjpeg($fi lename); nieważ społeczność użytkowników języka
$fgcolor = imagecolorallocate($h_im,140,140,140); PHP jest o wiele większa i jest dostępne o
$x = 5; wiele więcej literatury specjalistycznej do-
$y = imagesy($h_im)*0.95; tyczącej tego zagadnienia.
imagestring($h_im, 3, $x, $y, $commentstring, $fgcolor);
imagejpeg($h_im,$fi lename); Biblioteka PHP GD
chmod($fi lename, 0777); Użytkownicy języka PHP mają do dyspozy-
imagedestroy($h_im); cji bibliotekę PHP GD służącą do genero-
} wania i manipulowania grafiką. Umożliwia
ona operacje na plikach graficznych forma-
Listing 5. Funkcja graficzna negatywu tów gif, png, jpg, xbmp, xpm oraz wielu in-
nych. Biblioteka PHP GD daje dostęp do
public function negative($fi lename) { filtrów graficznych oraz możliwości wła-
$skad = $fi lename; snoręcznego rysowania grafiki.
$docelowy = $skad; Jeśli nie wiesz, czy zainstalowany na
serwerze interpreter języka PHP ma wbu-
$img = imagecreatefromjpeg($skad); dowaną bibliotekę GD skorzystaj z funkcji
imagefi lter($img, IMG_FILTER_NEGATE); phpinfo(). Interpreter języka PHP wyma-
imagejpeg($img, $docelowy); ga bowiem aby obsługa biblioteki GD zo-
chmod($docelowy, 0777); stała określona podczas fazy kompilacji in-
} terpretera.
Z reguły większość instalacji posia-
da bibliotekę GD, jednakże warto to wcze-
śniej sprawdzić, aby oszczędzić czas i ner-
wy na przekompilowanie interpretera PHP.
Jeśli korzystasz z zewnętrznego dostawcy
usług hostingu zapytaj go o obsługę wspo-
mnianej biblioteki.
Osadzanie tekstu
Często spotykaną opcją dotyczącą manipula-
cji grafiką jest osadzanie tekstu na zdjęciach.
Wykorzystywane jest to zazwyczaj celem
oznaczania pochodzenia danego pliku gra-
ficznego. Użytkownicy serwisów społecz-
nościowych lub portali służących do skła-
dowania zdjęć znają na pewno zagadnienie
umieszczania notatki tekstowej w którymś z
narożników obrazu.
Technika ta jest przydatna, gdy chce-
my mieć pewność, że zasoby naszego ser-
wisu internetowego są wykorzystywane w
sposób zgodny z przeznaczniem. Osadza-
jąc tekst na pliku graficznym wiemy, że
użytkownicy wykorzystując grafiki pobra-
ne z naszego serwisu jednocześnie go re-
klamują.
Jak widać, w lewym dolnym rogu przy-
Rysunek 10. Przykład gry sieciowej 3D
kładowej grafiki (patrz Rysunek 6.) został
54 czerwiec 2008
Programowanie
Programowanie grafiki
osadzony napis identyfikujący pochodzenie tomatów. Zarówno rozwój mechanizmów ścia, takich jak kontrolery gier i inne urzą-
danego pliku graficznego. Captcha jak i automatów ma swoje szla- dzenia wskazujące.
chetne cele. Znając jakikolwiek popularny język pro-
Edytor zdjęć Rozwijanie aplikacji rozpoznających gramowania obiektowego i nie tylko, jest nie-
Przykładem pełnego zastosowania bibliote- tekst pozwala na coraz to lepsze przygoto- mal wskazane aby korzystać z dobrodziejstw
ki PHP GD jest aplikacja edytora zdjęć on- wywanie aplikacji OCR oraz rozpoznawa- jakie niesie nam OpenGL. Dodając do tej bi-
line. Aplikacja taka umożliwia wgrywanie nia pisma odręcznego na urządzęniach ty- blioteki inne rozszerzenia w postaci OpenAL
oraz modyfikowanie zdjęć. Jest ona prostą pu tablet lub palmtop (patrz programowa- odpowiedzialnej za dzwięk, SDL ułatwiającej
alternatywą dla programów graficznych in- nie grafiki J2ME). tworzenie aplikacji multimedialnych (np. He-
stalowanych na naszych komputerach. Wracając do naszego edytora graficzne- roes of Might and Magic III) oraz PLIB NET
Spośród dostępnych funkcji graficz- go. Widzimy, że tworzenie filtrów nie jest przeznaczonej do połączeń sieciowych, mamy
nych w przykładowym edytorze zdjęć onli- specjalnie skomplikowane (patrz Listing możliwość stworzenia dowolnej gry 2D lub
ne możemy wyróżnić między innymi: 5.). Wystarczy opanować podstawowe pole- 3D z obsługą klawiatury, myszy oraz połączeń
cenia. Zatem najpierw tworzymy grafikę na sieciowych (patrz Rysunek 9 i 10.).
" negatyw, podstawie pliku graficznego lub tworzymy OpenGL to idealne narzędzie do two-
" sepia, go od początku, następnie stosujemy filtr i rzenia przenośnych gier utrzymując jed-
" rozmycie, zapisujemy grafikę niszcząc jednocześnie nocześnie dużą wydajność działania. Przy-
" obrót, obiekt pliku graficznego przechowywany w kładem, który sam się tutaj nasuwa jest Do-
" kontrast, pamięci. Tyle, jeśli chodzi o manipulacje na om III.
" oraz wiele innych. grafice za pomocą biblioteki PHP GD.
Jeśli przedstawiony powyżej krótki Podsumowanie
Funkcje te są bezpośrednio obsługiwane z po- opis wraz z wynikami zainteresował ko- Na koniec, warto podsumować do jakich
ziomu języka PHP wykorzystując odpowiednie goś (patrz Rysunek 8.), warto z pewnością wniosków doszliśmy w trakcie tego arty-
funkcje graficzne biblioteki PHP GD. odnieść się do podręcznika biblioteki GD kułu. Otóż, chcąc programować grafikę na-
Lista funkcji dostępnych dla biblioteki znajdującego się na oficjalnej stronie inter- leży przede wszystkim określić swoje cele.
PHP GD jest dosyć obszerna. Najważniej- netowej interpretera PHP. Znajduje się tam Dopiero potem możemy wybrać odpowied-
szymi jednak funkcjami są funkcje odpo- obszerna lista dostępnych funkcji oraz ich nie dla siebie narzędzie, które pomoże nam
wiedzialne za filtry graficzne. Są to funkcje przeznaczenie. je osiągnąć.
najczęściej wykorzystywane w aplikacjach Jeśli chcemy programować przenośne
graficznych umożliwiających manipulację Programowanie grafiki OpenGL aplikacje na urządzenia mobilne musimy
na zdjęciach jedynie za pomocą przeglą- Na koniec naszego zestawienia dotyczące- stosować J2ME. Innego wyboru raczej nie
darki internetowej. Pozostałe funkcje, któ- go technik programowania grafiki opisze- mamy. Jeśli chcemy natomiast programo-
re umożliwiają już samo generowanie gra- my bibliotekę OpenGL. wać gry warto rozważyć OpenGL lub alter-
fiki, są częściej wykorzystywane podczas Biblioteka ta nie jest bezpośrednio zwią- natywnie mniej przenośny DirectX. Celem
dynamicznego tworzenia wykresów staty- zana z żadnym językiem programowania, za- generowania oraz manipulacji na plikach
stycznych itp. tem możemy o niej mówić jako o czymś uni- graficznych warto przeczytać podręcznik
Jednym z najbardziej rozpowszechnio- wersalnym. OpenGL jest zestawem interfej- PHP GD oraz programować wykorzystując
nych zastosowań biblioteki PHP GD lub po- sów programistycznych zwanych API. Umoż- tą właśnie bibliotekę.
dobnych jest prosty mechanizm sprawdzają- liwiają one dostęp do zaawansowanych funk- Dla osób chcących poszerzyć swo-
cy pochodzenie wprowadzanych danych do cji i technik programowania grafiki za pomo- je horyzonty wiedzy oraz konstruktywnie
formularzy internetowych. Celem ogranicze- cą nowoczesnych kart graficznych. Wspomina- zabić czas pozostaje język assembler. Po-
nia możliwości wprowadzania danych przez jąc o API OpenGL warto również powiedzieć ziom trudności jest duży i zmierza w kierun-
automaty spamowe, stosuje się tak zwa- o DirectX. Jednakże ze względu na nasze zain- ku bardzo dużego. Rekompensuje to satys-
ne Captcha. Generują one losowo wybrany teresowanie rozwiązaniami dedykowanymi dla fakcja, która również może być duża. Trze-
ciąg znaków zamieniając je na rozrzucone po systemu Linux i pochodnych, ten temat zosta- ba się jedynie zastanowić czy potrafimy po-
obrazku elementy graficzne. Są one zazwy- wimy na inną okazję. święcić na coś kilka godzin, podczas gdy w
czaj nieczytelne dla automatycznych aplika- Za pomocą OpenGL uzyskujemy dostęp innej technologii zajmie nam to kilka minut.
cji, ale za to czytelne dla człowieka. Jak każ- do pamięci VRAM, wszelkich sprzętowych Z drugiej jednak strony każdy twórca szyb-
de rozwiązanie, także i to, ma swoje wady i programowych rozszerzeń optymalizują- szych narzędzi musiał mieć przynajmniej
oraz zalety. cych działanie grafiki. Mamy także możli- podstawową styczność z językiem assem-
Niewątpliwie zaletą takiego działania wość korzystania z urządzeń wejścia i wyj- bler. Zatem, miłej zabawy.
jest ograniczenie wprowadzania niechcia-
nych danych przez aplikacje automatyzu-
jące swoje działanie. Wadą jest natomiast
O autorze
kolejny element do wypełniania przez czło-
wieka. Często zdarza się, że mechanizmy
Michał Sobczak. Programista, autor literatury informatycznej. Właściciel fi rmy Septerion
typu Captcha przestają być czytelne dla
zajmującej się produkcją i sprzedażą oprogramowania wspomagania zarządzania.
zwykłych użytkowników tylko po to aby
Kontakt: michal.sobczak@septerion.com
coraz bardziej ograniczać dostęp dla au-
www.lpmagazine.org 55
Wyszukiwarka
Podobne podstrony:
2008 06?ytor grafiki wektorowej Inkscape [Grafika]2008 06 Scalix – poczta dla podróżujących [Programowanie]2008 06 MiniCommander – własne dwa panele [Programowanie]Serwer SQL 2008 Administracja i programowanie2008 06 Tworzenie i edycja grafiki online [Grafika]06 programowanie LADDER2008 06 the Way of the Ray Enterprise Collaboration with Liferay2008 06 Living Free Free Communications on the Freenet Network2008 06 Czy boisz się Slackware [Poczatkujacy]2008 06 teleinformatyk arkusz x2008 06 Virtual machines [Consumer test]2008 06 05 WHR B?instrukcja2008 06 Test CAPTCHAwięcej podobnych podstron