Rozdzia� 9. Grafika W tym rozdziale: Architektura GDI W jaki spos�b GDI reprezentuje sprz�t graficzny R�ne rodzaje grafiki GDI Kontekst urz�dzenia W jaki spos�b wy�wietla� na ekranie tekst i grafik� wektorow� Manipulowanie tekstem Czcionki Pi�ra i p�dzle Operacje rastrowe Regiony obcinania Od wczesnych lat osiemdziesi�tych systemy operacyjne przesz�y d�ug� drog�. W tamtych czasach pracowa�o si� z systemami tekstowych menu, w kt�rych polecenia dla programu by�y przekazywane poprzez klawisze funkcyjne. Jedynie komputery takie jak Atari, Ainiga czy Mac cieszy�y si� luksusem posiadania graficznego interfejsu u�ytkownika. Jednak po sukcesie platformy IBM PC i systemu operacyjnego Windows wszystko sta�o si� graficzne. Programi�ci nie musz� ju� martwi� si� niskopoziomowymi szczeg�ami wi���cymi si� z rysowaniem okna, dialogu czy tworzeniem przycisku (przynajmniej w wi�kszo�ci przypadk�w). Programowanie w �rodowisku graficznym przynosi ca�� mas� zupe�nie nowych zagadnie�, szczeg�lnie gdy twoja aplikacja wy�wietla dane graficznie, na przyk�ad w postaci wykres�w, graf�w lub diagram�w. W�a�nie tego dotyczy ca�y bie��cy rozdzia�: programowania graficznego w Windows 98. Poznamy podstawy architektury graficznej, nazywanej GDI, oraz zobaczymy, jak dzia�a ka�da z cz�ci, udost�pniaj�c programi�cie niesamowit� elastyczno�� i du�e mo�liwo�ci. Om�wimy r�ne klasy GDI i przedstawimy r�ne elementy zwi�zane z GDI, takich jak p�dzle, pi�ra czy czcionki. Wprowadzenie do interfejsu urz�dze� graficznych Interfejs urz�dze� graficznych, w skr�cie GDI (Graphics Device Interface), formuje cz�� rdzenia systemu operacyjnego Windows. GDI zarz�dza wszelkim wyj�ciem graficznym w programach Windows. Oznacza to, �e bez wzgl�du na to czy na ekranie jest wy�wietlane okna, czy dzia�a wspania�y wygaszacz ekranu, czy te� aplikacja tworzy wydruk na drukarce, za wszystkie te operacje odpowiada w�a�nie GDI. Windows tak�e wykorzystuje GDI do rysowania element�w interfejsu u�ytkownika, takich jak okna, menu czy dialogi. Windows wykorzystuje GDI nawet do wy�wietlania wska�nika myszy, mimo �e wydaje si�, �e �unosi" si� on ponad innymi obiektami na ekranie. Microsoft stworzy� GDI w celu oddzielenia operacji graficznych od sprz�tu. GDI zapewnia wysokopoziomowe funkcje daj�ce og�lnie ten sam efekt bez wzgl�du na sprz�t zainstalowany w systemie. Oddzielenie operacji graficznych od sprz�tu umo�liwia tworzenie interesuj�cych efekt�w przy niewielkim wysi�ku i bez zwracania szczeg�lnej uwagi na zainstalowany sprz�t. Rodzaje grafiki Tekst Funkcje GDI wyst�puj� w trzech odmianach: tekstowe, rastrowe i wektorowe. Cho� ka�da z tych kategorii mo�e wydawa� si� samodzielna, jednak wyst�puj� razem z okre�lonych powod�w. Na poziomie sterownika urz�dzenia ka�dy rodzaj grafiki posiada w�asny zestaw punkt�w wej�cia i sposob�w dzia�ania. Na wy�szym, programowym poziomie, program steruje wygl�dem ka�dego z rodzaj�w, korzystaj�c z nieco odmiennego zestawu atrybut�w graficznych. Poznanie ka�dego z rodzaj�w grafiki stanowi pierwszy krok na drodze do pe�nego opanowania GUI. A poniewa� chcesz zosta� ekspertem w dziedzinie grafiki w Windows, przejd�my do opisu jej poszczeg�lnych rodzaj�w. Jak na ironi�, mimo �e Windows znacznie u�atwia programowanie grafiki, jednak w przypadku tekstu wi��e si� to ze zwi�kszonymi komplikacjami. Jednak przy wi�kszej z�o�ono�ci mamy do dyspozycji tak�e wi�ksz� elastyczno��. Poniewa� tekst jest traktowany jako grafika, mo�esz kontrolowa� wi�cej aspekt�w ni� m�g�by� nawet wymy�li� w przypadku �rodowiska tekstowego. Chcesz stworzy� 18-punktow�, czerwon� czcionk� Helvetica? �aden problem. A co z 12-punktowym, cieniowanym tekstem wypisanym czcionk� Arial? Tak�e �aden problem. Aby te same efekty otrzyma� w �rodowisku tekstowym, musia�by� si� naprawd� bardzo nagimnastykowa�. W Windows wystarczy w tym celu kilka wywo�a� GDI. Grafika rastrowa Drugim rodzajem grafiki GDI jest grafika rastrowa. Grafika rastrowa jest w Windows najcz�ciej u�ywanym rodzajem grafiki. Funkcje grafiki tego typu operuj� na danych zawartych w tablicach zwanych bitmapami (mapami bit�w). Obraz standardowego monitora VGA 640x480 jest po prostu bitmap�, kt�r� karta graficzna wy�wietla na ekranie. Cz�ci� obs�ugi grafiki rastrowej w Windows jest mo�liwo�� tworzenia bitmap poza ekranem. Rysowanie na takich bitmapach i przesy�anie ich w ca�o�ci na ekran jest bardzo szybkie, dzi�ki czemu mo�esz tworzy� grafik� pozbawion� migotania. Innymi przyk�adami grafiki rastrowej s� ikony i wska�niki myszy dodawane do Twojej aplikacji w wyniku edycji pliku zasob�w (.RC). Kolejnym przyk�adem wykorzystania grafiki rastrowej jest przemieszczanie okien na ekranie. Gdy okno jest przesuwane w inne miejsce ekranu, funkcje grafiki rastrowej pobieraj � piksele tworz�ce okna i umieszczaj� je w miejscu docelowym. Poniewa� dane na ekranie s� przechowywane w tablicach, bitmapy s� przydatne do przechowywania z�o�onej grafiki w celu szybkiego wy�wietlenia na ekranie. Mo�esz zawczasu tworzy� z�o�one obiekty podczas kompilacji lub ju� podczas dzia�ania programu, a nast�pnie szybko kopiowa� je na ekran. Jedynym problemem w przypadku bitmap jest ilo�� miejsca przez nie zajmowanego. Jedna bitmap� o rozmiarach 640 x 480 pikseli i o�miobitowym kolorze zajmuje oko�o 300K miejsca w pami�ci. Oczywi�cie, wraz ze wzrostem rozmiar�w i ilo�ci kolor�w zwi�ksza si� r�wnie� ilo�� zajmowanego miejsca. Grafika wektorowa W GDI termin grafika wektorowa odnosi si� do funkcji rysunkowych tworz�cych odcinki oraz wype�nione figury. GDI posiada ca�y zestaw funkcji rysuj�cych odcinki, krzywe, wycinki oraz wielok�ty. Mo�esz w dowolny spos�b ��czy� i dopasowywa� wywo�ania tych funkcji z funkcjami rastrowymi. Zwykle my�l�c o grafice wektorowej, ludzie my�l� o regularnych kszta�tach geometrycznych. Jednak podczas rysowania interfejsu u�ytkownika Windows korzysta z bardzo niewielu wywo�a� grafiki wektorowej. Wi�kszo�� aplikacji tak�e zwykle z niej nie korzysta, oczywi�cie z wyj�tkiem program�w rysunkowych i projektowych. Oczywi�cie, korzystanie z tych funkcji nie jest niczym niew�a�ciwym, lecz po prostu aplikacje biurowe zwykle maj� do czynienia z tekstami, za� programy wy�wietlaj�ce obrazki zwykle pos�uguj� si� g��wnie bitmapami. Urz�dzenia GDI Aby fizyczne urz�dzenie graficzne, takie jak drukarka czy karta graficzna, mog�o by� urz�dzeniem GDI, wcale nie musi obs�ugiwa� wszystkich trzech rodzaj�w grafiki. Na tym w�a�nie polega pi�kno GDI. W oparciu o zainstalowane sterowniki urz�dze�, GDI mo�e zaadoptowa� si� do zainstalowanego sprz�tu i dostarcza� sensownych wynik�w graficznych bez wzgl�du na rodzaj urz�dze�. W rzeczywisto�ci bardzo niewiele urz�dze� posiada wbudowan� pe�n� obs�ug� wszystkich rodzaj�w grafiki. Jedynym wymaganiem, jakie musi spe�nia� urz�dzenie GDI, jest mo�liwo�� zmiany koloru piksela. To wszystko. Dla wszystkich operacji poza tym prostym wymaganiem GDI mo�e samo roz�o�y� z�o�one ��danie rysunkowe na prostsze elementy zrozumia�e dla urz�dzenia graficznego. Jednak sterownik urz�dzenia musi dok�adnie poinformowa� GDI, jakie posiada mo�liwo�ci. Sterownik komunikuje si� z GDI, przekazuj�c zestaw bit�w mo�liwo�ci, wykorzystywanych przez GDI do dostosowania w�asnych ��da� rysunkowych. W przypadku prostych urz�dze� z ograniczonymi mo�liwo�ciami GDI samodzielnie adaptuje i wykonuje wi�kszo�� pracy. GDI mo�e wewn�trznie zamienia� wszystkie wywo�ania tekstowe i wektorowe na dane rastrowe, kt�re mog� zosta� przekazane do urz�dzenia. Jak ju� wiemy, mimo �e grafika rastrowa wymaga wi�kszej ilo�ci miejsca w pami�ci, jednak umo�liwia wy�wietlanie nawet najbardziej skomplikowanej grafiki na najta�szych nawet, podstawowych urz�dzeniach graficznych. Je�li urz�dzenie poinformuje GDI, �e posiada bardziej zaawansowane mo�liwo�ci, GDI wykonuje mniejsz� cz�� pracy. Je�li sprz�t graficzny potrafi bezpo�rednio obs�u�y� ��danie rysunkowe, GDI przekazuje to ��danie bezpo�rednio do urz�dzenia. W rezultacie wyst�puje wzrost wydajno�ci zwi�zany z dwoma aspektami. Po pierwsze, GDI musi wykona� mniej wewn�trznej pracy i w mniejszym stopniu obci��a procesor. Po drugie, wysokopo-ziomowe ��dania rysunkowe zajmuj� mniej pami�ci i miejsca na dysku ni� te same ��dania rozbite na niskopoziomowe sk�adniki. Mniej przechowywanej informacji oznacza mniejsze obci��enie systemu, co tak�e przek�ada si� na bezpo�redni wzrost wydajno�ci. Ta mo�liwo�� wsp�pracy z szerokim asortymentem urz�dze� jest jednym z powod�w, dla kt�rych GDI jest opisywane jako interfejs graficzny niezale�ny od sprz�tu. Je�li urz�dzenie samo nie obs�uguje operacji rysunkowych, GDI wkracza do akcji i zast�puje ��danie programowo. Z drugiej strony, je�li urz�dzenie mo�e samo obs�u�y� ��danie, GDI si� nie wtr�ca i przekazuje je do urz�dzenia, powoduj�c zwi�kszenie wydajno�ci systemu. Rodzaje urz�dze� GDI Rodzaje urz�dze� obs�ugiwanych przez GDI mo�na podzieli� na dwie kategorie: urz�dzenia fizyczne oraz pseudourz�dzenia. Ten podzia� jest przydatny, gdy� pomaga wyja�ni� niezale�n� od urz�dzenia natur� GDI. Skierujmy wi�c uwag� na zrozumienie r�nic pomi�dzy tymi rodzajami urz�dze�. Urz�dzenia fizyczne Z punktu widzenia programu istniej� tylko dwa podstawowe urz�dzenia fizyczne: ekran monitora oraz drukarka. Gdy aplikacja rysuje na ekranie, zawsze rysuje wewn�trz okna. Mened�er okien zapewnia, �e niepoprawnie zachowuj�ce si� okno nie przekroczy swoich granic i nie narysuje niczego wewn�trz innego okna. GDI wyznacza te granice, korzystaj�c z techniki zwanej obcinaniem (ang. clipping). Obcinanie polega na okre�laniu granic rysowania. Najbardziej oczywistymi i najcz�ciej wyst�puj�cymi granicami s� granice okna, kt�rymi zarz�dza Mened�er okien, mo�esz jednak tworzy� tak�e w�asne regiony obcinania. Mo�esz na przyk�ad wykorzysta� to do wype�nienia obszar�w rysowanych przez oddzielne cz�ci aplikacji, bez konieczno�ci tworzenia w tym celu osobnych okien. Kolejn� technik�, u�ywan� przez GDI w celu zapewnienia rozdzia�u pomi�dzy r�nymi cz�ciami wydruku, jest buforo...
Morfeusz__