GRAFIKA
Moduł graphics.h zawiera funkcje umożliwiające:
obsługę kart graficznych
wybór i zmianę trybu graficznego
rysowanie różnych figur geometrycznych z zastosowaniem linii o różnej grubości i fakturze
wypełnianie obszarów różnymi wzorcami
tworzenie napisów z wykorzystaniem różnych krojów pisma i w różnych kierunkach
obsługę błędów operacji graficznych
ORGANIZACJA I ZARZĄDZANIE EKRANEM
W zależności od posiadanej karty, różna może być rozdzielczość i liczba kolorów.
Schemat programu
Inicjowanie grafiki
void far initgraph(int *sterownik, int *tryb, const char *ścieżka);
sterownik - wskaźnik zmiennej zawierającej liczbę określającą sterownik
Stałe definiujące sterowniki:
DETECT, CGA, MCGA, EGA, EGA64, EGAMONO, IBM8514, HERCMONO, ATT400, VGA, PC3270, CURRENT_DRIVER=-1
tryb - wskaźnik zmiennej zawierającej numer trybu graficznego dla danego sterownika
Stałe trybów graficznych ekranu:
CGAC0 = 0, /*320x200 paleta 0; 1 strona*/
.
.
.
VGAL0 = 0, /*640x200 16 kolorów; 4 strony*/
VGAMED =1, /*640x350 16 kolorów; 2 strony*/
VGAHI =2, /*640x480 16 kolorów; 1 strona*/
.
.
.
ścieżka - łańcuch zawierający ścieżkę do skorowidza ze sterownikami grafiki (pliki.BGI)
Informacje o sterowniku i trybie graficznym
void far detectgraph(int *sterownik, int *tryb);
int ster, tryb;
detectgraph(&ster, &tryb);
initgraph(&ster,&tryb,”C:\\BORLAND\\BGI”);
Zamknięcie trybu graficznego:
void far closegraph(void);
Przywracanie trybu tekstowego aktualnego w momencie inicjowania grafiki:
void far restorecrtmode(void);
Zmiana trybu tekstowego na graficzny
void far setgraphmode(int tryb);
Okna graficzne
Wartości maksymalne dla ekranowych współrzędnych X i Y
int far getmaxx(void);
int far getmaxy(void);
Nowe parametry okna
void far setviewport(int left, int top, int right, int bottom, int clip);
clip - różny od 0, wszystkie operacje odnoszą się do zdefiniowanego okna
Czyszczenie okna
void far cleardevice(void); czyści cały ekran, kursor na 0,0 (abs)
void far clearviewport(void); czyści aktualne okno, kursor na 0,0 (wzg)
Błędy
int far graphresult(void); - kod ostatnio popełnionego błędu
grOK =0, /*brak błędu*/
grNoInitGraph =-1, /*nie zainicjowano grafiki*/
grNotDetected =-2, /*nie wykryto karty grficznej*/
.
.
.
char* grapherrormsg(int błąd);
wskaźnik do łańcucha zawierającego komunikat o błędzie o podanym kodzie
int ster, tryb, blad;
ster=DETECT;
initgraph(&ster,&tryb,””);
blad=graphresult();
if(blad!=grOK)
{
printf(”Grafika nie jest OK: %s \n”,grapherrormsg(blad);
exit(1);
}
else ...
Kolory
void far setbkcolor(int kolor); - ustalenie koloru tła
void far setcolor(int kolor); - ustala kolor rysowania
Stałe kolorów:
BLACK, /*ciemne kolory*/
BLUE,
GREEN,
CYAN,
RED,
MAGENTA,
BROWN,
LIGHTGRAY, /*jasne kolory*/
DARKGRAY,
LIGHTBLUE,
LIGHTGREEN,
LIGHTCYAN,
LIGHTRED,
LIGHTMAGENTA,
YELLOW,
WHITE
Funkcje rysowania linii:
void far moverel(int dx, int dy); - przesunięcie o wskaźnik dx, dy
void far moveto(int x, int y); - przesunięcie do punktu x, y
void far setlinestyle(int styl, unsigned wzor, int grubosc); - ustalenie aktualnego rodzaju linii
Stałe rodzajów linii (styl):
SOLID_LINE =0, /*linia ciągła*/
DOTTED_LINE =1, /*linia kropkowana*/
CENTER_LINE =2, /*linia symetrii*/
DASHED_LINE =3, /*linia przerywana*/
USERBIT_LINE =4 /*linia definiowana przez użytkownika*/
wzór - podajemy, gdy styl został ustawiony na 4
grubość
NORM_WIDTH =1,
THICK_WIDTH =3
void far putpixel(int x, int y int kolor); - rysuje punkt o współrzędnych (x, y) w podanym kolorze
void far line(int x1, int y1, int x2, int y2); - rysuje linię łączącą punkty (x1, y1) i (x2, y2); wskaźnik zostaje w miejscu
void far linerel(int dx, int dy); - rysuje linię od aktualnej pozycji do punktu oddalonego o (dx, dy); wskaźnik ustawiony w nowym miejscu
void far lineto(int x, int y); - rysuje linię od aktualnej pozycji do punktu o współrzędnych (x, y); wskaźnik ustawiony na punkt (x, y)
void far rectangle(int left, int top, int right, int bottom); - rysuje prostokąt
void far drawpoly(int numpoints, const int far *polypoints); - rysuje linię łamaną o numpoints wierzchołkach; polypoints powinien wskazywać tablicę liczb całkowitych zawierającą współrzędne punktów x1, y1, x2, y2 ... (wielokąty n+1 współrzędnych nwsp=0wsp).
void far circle (int x, int y, int promień); - rysuje okrąg o podanym promieniu i środku w punkcie (x, y)
void far arc(int x, int y, int stangle, int endangle, int promień); - łuk o środku (x, y) podanym promieniu od kąta stangle do kąta endangle
void far ellipse(int x, int y, int stangle, int endangle, int promienx, int promieny); - kreśli eliptyczny łuk
Wypełnianie figur:
void far setfillstyle(int wzor, int kolor); - ustalenie wzorca i koloru wypełnienia
Predefiniowane wzorce:
EMPTY_FILL, /*wypełnienie kolorem tła*/
SOLID_FILL, /*wypełnienie kolorem ustalonym*/
LINE_FILL, /*wypełnienie liniami poziomymi*/
LTSLASH_FILL, /*wypełnienie liniami ukośnymi*/
.
.
.
USER_FILL /*wypełnienie wzorcem zdefiniowanym przez użytkownika*/
void far setfillpattern(const char *upattern, int kolor); - pozwala zdefiniować wzorzec przez użytkownika; parametr upattern wskazuje tablicę ośmiu bajtów definiujących wzorzec
np. char tab[8]={195,195,0,0,0,0,195,195};
195 - 11000011
195 - 11000011
0 - 00000000
0 - 00000000
0 - 00000000
0 - 00000000
195 - 11000011
195 - 11000011
void far bar(int left, int top, int right, int bottom); - wypełnienie prostokąta bez rysowania konturów
void far bar3d(int left, int top, int right, int bottom, int depth, int topflag); - rysuje prostopadłościan; wypełnia przednią ścianę
topflag =0 nie rysuje górnej powierzchni; można umieszczać jeden prostopadłościan na drugim
void far fillpoly(int numpoints, const int far *polypoints); - rysuje linię łamaną i wypełnia ją (jeśli nie zamknięta to łączy punkt pierwszy z ostatnim)
void far pieslice(int x, int y, int stangle, int endangle, int promień); - rysuje i wypełnia wycinek koła
void far sector(int x, int y, int stangle, int endangle, int promieńx, int promieńy); - rysuje i wypełnia wycinek elipsy
void far fillellipse(int x, int y, int promieńx, int promieńy); - rysuje i wypełnia elipsę
void far floodfill(int x, int y, int kolor); - wypełnia obszar otoczony konturem w podanym kolorze; (x, y) - współrzędne punktu wewnątrz obszaru
Teksty w grafice
void far settextstyle(int font, int kierunek, int rozmiar); - ustala krój, kierunek i rozmiar tekstu
font - stałe określające krój pisma
DEFAULT_FONT =0,
TRIPLEX_FONT =1,
SMALL_FONT =2,
SANS_SERIF_FONT =3,
GOTHIC_FONT =4,
.
.
.
kierunek wyprowadzanego tekstu
HORIZ_DIR 0 /*od lewej do prawej*/
VERT_DIR 1 /*z góry na dół*/
rozmiar znaków od 1 do 10
void far settextjustify(int poziom, int pion); - służy do justowania tekstu
poziom
LEFT_TEXT =0, /*wyrównanie do lewego marginesu*/
CENTER_TEXT =1, /*środkowanie*/
RIGHT_TEXT =2, /*wyrównanie do prawego marginesu*/
pion
BOTTOM_TEXT =0, /*wyrównanie do dolnego marginesu*/
CENTER_TEXT =1, /*środkowanie w pionie*/
TOP_TEXT =2, /*wyrównanie do górnego marginesu*/
void far outtext(const char *łańcuch); - wyświetlenie tekstu względem aktualnej pozycji wskaźnika
void far outtextxy(int x, int y, const char *łańcuch); - wyświetlenie tekstu względem punktu (x, y)
zainicjowanie grafiki
operacje w trybie graficznym
zakończenie grafiki
Okno graficzne
Xabs
Yabs
Ywzg
Xwzg
0,0
xmax, ymax
left, top
right, bottom
right, bottom
left, top
left, top
right, bottom
depth
wypełnienie wzorem i kolorem