1 / 33

Grafika tekstowa Zarządzanie ekranem w trybie tekstowym Borland C++ - funkcje

Grafika tekstowa Zarządzanie ekranem w trybie tekstowym Borland C++ - funkcje. Funkcje pozwalają na: zmianę trybu tekstowego, sterowanie atrybutami znaków wysyłanymi na ekran, realizację operacji we-wy, obsługę pamięci obrazu, sterowanie położeniem i kształtem kursora.

gavan
Download Presentation

Grafika tekstowa Zarządzanie ekranem w trybie tekstowym Borland C++ - funkcje

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Grafika tekstowa Zarządzanie ekranem w trybie tekstowym Borland C++ - funkcje • Funkcje pozwalają na: • zmianę trybu tekstowego, • sterowanie atrybutami znaków wysyłanymi na ekran, • realizację operacji we-wy, • obsługę pamięci obrazu, • sterowanie położeniem i kształtem kursora. • Prototypy tych funkcji są umieszczone w bibliotece • conio.h constream.h

  2. Organizacja ekranu w trybie tekstowym Ekran podzielony jest na jednakowe komórki. W komórce może znaleźć się tylko jeden znak kolumna 3 współrzędne bezwzględne (left,top) okno tekstowe wiersz 2 (right,bottom) współrzędne względne (3,2)

  3. Sterowanie trybem pracy ekranu void textmode (int newmode); textmode(C80); C40 1 tryb kolorowy, 40 kolumn C80 3 tryb kolorowy, 80 kolumn MONO 7 tryb monochromatyczny 80 kolumn Definiowanie okien tekstowych void window (int left, int top, int right, int bottom); (funkcja ta służy do określenia obszaru ekranu zajmowanego przez okno tekstowe) dla całego ekranu window(1,1,80,25); tryb 80-kolumnowy window (1,1,40,25); tryb 40-kolumnowy

  4. Sterowanie atrybutami znaków wysyłanymi na ekran Bajt atrybutu znaków określa kolor znaku, podwyższoną jasność. kolor jego tła, migotanie void textbackground(int newcolor);kolor tła textbackground(4); czerwony kolor tła. void textcolor(int newcolor);kolor znaku textcolor(2); zielony kolor znaku. void highvideo(void);podwyższona jasność void lowvideo(void);normalna jasność void normvideo(void);przywraca stan początkowy

  5. Stałe kolorów

  6. Sterowanie pozycją i wyglądem kursora void gotoxy(int x, int y);umieszcza kursor w pozycji x,y okna gotoxy(20,3); int wherex(void);wartością jest współrzędna x kursora x=wherex; int wherey(void);wartością jest współrzędna y kursora y=wherey; void setcursortype(int cur_t);zmiana wyglądu kursora setcursortype(_NOCURSOR); wyłącza kursor, setcursortype(_SOLIDCURSOR); kursor jako pełny prostokąt, setcursortype(_NORMALCURSOR); normalny kursor w postaci podkreślenia,

  7. Czyszczenie ekranu, usuwanie, wstawienie wierszy, void clreol(void);usuwa wszystkie znaki od pozycji kursora do końca wiersza clreol(); void clrscr(void);usuwa wszystkie znaki z ekranu clrscr(); void delline(void);usuwa wiersz w pozycji kursora delline(); void insline(void);wstawia pusty wiersz w pozycji kursora insline(); Operacje wejścia z konsoli (klawiatury) int getch(void);odczytuje znak z klawiatury getch(); int getche(void);odczytuje znak z klawiatury i wysyła go na ekran getche();

  8. 0 kolor 1 kolor 2 kolor 3 kolor 4 kolor 5 kolor 14 kolor 15 kolor Wydruk kolorów – od 0 do 15 #include<iostream.h> #include <conio.h> main() { clrscr(); int i; textmode(C40); textbackground(15); window(20,10,40,25); for (i=0; i<=15; i++) { textcolor(i); cout<<i<<"\t"; cprintf("kolor \r\n"); } getch(); return 0; }

  9. Grafika tekstowa obiektowe strumienie wyjścia na ekran Zarządzanie ekranem w trybie tekstowym Borland C++ - funkcje • Prototypy tych funkcji są umieszczone w bibliotece constream.h • umożliwiają jednoczesną obsługę kilku okien tekstowych • Wyjście strumienia realizowane jest przez operator << • a do formatowania danych wysyłanych na ekran służą manipulatory

  10. Manipulatory strumieni konsoli constream.h

  11. Wykorzystanie strumieni konsoli –przykład Strumienie konsoli działają niezależnie, każdy z nich operuje tylko we własnym oknie tekstowym. #include<constrem.h> main() { constream w1, w2, w3; w1.window(1,1,40,12); w2.window(41,13,80,24); w3.window(1,15,25,22); w1.clrscr(); w2.clrscr(); w3.clrscr(); w1<<setattr(YELLOW|(BROWN<<4))<<"OKNO 1"<<endl; w2<<setxy(10,5)<<"OKNO 2"<<endl; w3<<highvideo<<"OKNO 3"<<endl; return 0; }

  12. Grafika punktowa Zarządzanie ekranem w trybie graficznym Borland C++ - funkcje graficzne • Funkcje graficzne pozwalają na: • obsługę kart graficznych różnych typów (m.in. EGA, VGA,IBM8512), • rysowanie różnych figur geometrycznych z zastosowaniem różnych linii, • kreślenie okręgów, elips, oraz ich wycinków z możliwością ich wypełnienia, • wypełnianie obszarem wzorcem własnym lub standardowym, • tworzenie napisów w trybie graficznym, • obsługę błędów operacji graficznych. • Prototypy tych funkcji są umieszczone w bibliotece • graphics.h

  13. Organizacja i zarządzanie ekranem w trybie graficznym Zarządzanie w trybie graficznym zależy od typu zainstalowanej w komputerze karty graficznej Rozdzielczość (liczba punktów w pionie i poziomie) Liczba kolorów W pakiecie kompilatora Borland C++ dostarczane są sterowniki grafiki umożliwiające współpracę z różnymi typami kart. BORLANDC\BGI\*.bgi Hercules EGA VGA SVGA

  14. Prototyp funkcji inicjuj_grafike Wywołanie funkcji inicjuj_ grafike Operacje w trybie graficznym Zamknięcie trybu graficznego Definicja funkcji inicjuj_grafike ze sprawdzeniem poprawności uruchomienia trybu graficznego Schemat programu działającego w trybie graficznym #include <graphics.h> #include <iostream.h> #include <conio.h> int inicjuj_grafike(int gdriver, int gmode, char *pathgdriver); int main() { int ster=DETECT, tryb; if (!inicjuj_grafike(ster, tryb, "c:\\studenci\\cpp\\borlandc\\bgi")) return 0; line(0,0,200,200); getch(); closegraph(); } int inicjuj_grafike(int gdriver, int gmode, char *pathgdriver) { initgraph (&gdriver, &gmode, pathgdriver); if (graphresult()!=grOk) { cout<<"Blad w czasie uruchomienia grafiki"; return 0; } else return 1; }

  15. Funkcje zarządzające trybem graficznym initgraph(int *graphdriver, int *graphmode, const char *pathtodriver); Funkcja inicjująca obsługę grafiki *graphdriver – wskaźnik zmiennej zawierającej liczbę określającą typ sterownika grafiki, Jeżeli graphdriver=DETECT – funkcja sama określi jaki sterownik i jaki tryb pracy jest najbardziej odpowiedni. *graphmode – wskaźnik do zmiennej zawierającej numer trybu graficznego dla danego sterownika Jeżeli graphdriver=DETECT – wówczas wartość zmiennej graphmode nie jest brana pod uwagę. *pathtodriver – łańcuch zawierający ścieżkę do katalogu ze sterownikami grafiki (pliki *.bgi) closegraph(void); Funkcja zamykająca obsługę grafiki, przywraca tryb pracy przed inicjacją graphdefaults(void); Funkcja przywraca domyślne parametry pracy w aktualnym trybie.

  16. Wybrane stałe sterowników graficznych i trybów graficznych

  17. Xwzgl Okno graficzne Ywzgl Określenie położenia na ekranie współrzędne ekranowe absolutne i względne Xabs Yabs punkt ekranu (pixel)

  18. Okna graficzne i ich obsługa wybrane funkcje cleardevice(void); Czyści cały ekran graficzny tzn. wypełnia go kolorem tła i ustala położenie na (0,0) clearviewport(void); Czyści aktualne okno graficzne i ustala położenie na (0,0) w nim. int getmaxx(void); int getmaxy(void); Zwracają max wartość ekranowej współrzędnej x oraz y dla aktualnego sterownika i trybu pracy. setviewport(int left, int top, int right, int bottom, int clip); Ustala parametry nowego okna graficznego (setviewport(10,10,200,200,0). Gdy parametr clip=0 operacje graficzne są ograniczone do obszaru okna.

  19. Kolory Każdemu pikselowi odpowiada wartość, która nie określa koloru w sposób bezpośredni, lecz stanowi indeks palety kolorów zawierającej faktyczną informację o kolorze punktu. W ten sposób na ekranie może być jednocześnie wyświetlanych tyle kolorów, ile wpisów znajduje się w palecie. Sterowanie kolorami setbkcolor(int color) –ustala kolor tła obrazu setbkcolor(1); setcolor(int color) –ustala kolor rysowania setcolor(60); Zarządzanie paletami kolorów Stałe kolorów EGA i VGA

  20. Wzorzec i kolor wypełnienia setfillstyle(int pattern, int color);–ustala aktualne parametry wypełniania obszarów pattern – wzorzec, color –kolor wypełnienia setfillstyle(6,4); setfillpattern(const char *upattern, int color);–pozwala na zdefiniowanie wzorca przez użytkownika upattern –tablica wzorca, color –kolor wypełnienia setfillpattern(tab,4); floodfill(int x, int y, int border);–wypełnianie obszarów otoczonych konturem. Parametry x,y określają punkt wewnątrz wypełnianego konturu. floodfill(10,20,4);

  21. Sterowanie pozycją wskaźnika ekranu (aktualną pozycją) int getx(void); int gety(void); –wartością są aktualne współrzędne wskaźnika ekranu. getx(); gety(); moverel(int dx, int dy); –przesuwa wskaźnik ekranu o wektor (dx,dy). moverel(20,30); moveto(int x, int y); –przesuwa wskaźnik ekranu do punktu (x,y). moveto(100,214);

  22. Sterowanie wyglądem i sposobem kreślenia linii setlinestyle(int linestyle, unsigned upattern, int thickness); –ustalenie aktualnego rodzaju linii (faktury) –linestyle i jej grubości –thickness, gdy linia definiowana jest przez użytkownika wartość parametru upattern określa wzór linii użytkownika. setlinestyle(0,0,3) –linia ciągła pogrubiona.

  23. Rysowanie punktów i linii putpixel(int x, int y, int color); – rysuje punkt w miejscu o współrzędnych (x,y) i kolorze color putpixel(45,36,4); line(int x1, int y1, int x2 ,int y2); – rysuje linię od punktu (x1,y1) do punktu (x2,y2) line(45,36,4,5); linerel(int dx, int dy); – rysuje linię od punktu aktualnej pozycji wskaźnika do punktu oddalonego o wektor (dx,dy). linerel(5,36); lineto(int x, int y); – rysuje linię od punktu aktualnej pozycji wskaźnika do punktu o współrzędnych (x,y). lineto(25,36);

  24. Rysowanie – prostokąt, wielokąt, łamane rectangle(int left, int top, int right, int bottom); – funkcja rysuje prostokąt rozpięty między punktami (left,top) i (right,bottom) używając aktualnego koloru, rodzaju i grubości linii) rectangle(4,5,34,56); bar(int left, int top, int right, int bottom); – funkcja wypełnia prostokątny obszar rozpięty między punktami (left,top) i (right,bottom) używając aktualnego koloru i wzorca) bar(45,36,48,58); drawpoly(int numpoints, const int *polypoints); – funkcja rysuje łamaną o liczbie wierzchołków określonych parametrem numpoints używając aktualnego koloru, rodzaju i grubości linii. drawpoly(45,*tab1); fillpoly(int numpoints, const int *polypoints); – funkcja rysuje łamaną o liczbie wierzchołków określonych parametrem numpoints używając aktualnego koloru, rodzaju i grubości linii a następnie wypełnia zamkniętą łamaną. fillpoly(45,*tab1);

  25. Rysowanie – okrąg, elipsa, łuk arc(int x, int y, int stangle, int endangle, int radius); – łuk o środku w punkcie (x,y) i promieniu radius. Łuk ten kreślony jest od kąta stangleo do kąta endangleo. arc(4,5,34,0,90); circle(int x, int y, int radius); – okrąg o środku w punkcie (x,y) i promieniu radius. circle(100,150,90); ellipse(int x, int y, int stangle, int endangle, int xradius, int yradius); – eliptyczny łuk o środku w punkcie (x,y) i półosiami poziomą xradius i pionową yradius. Łuk ten kreślony jest od kąta stangleo do kąta endangleo. ellipse(4,5,0,90,20,10); fillellipse(int x, int y, int xradius, int yradius); – elipsa o środku w punkcie (x,y) i półosiami xradius i yradius i wypełnia bieżącym wzorcem i kolorem. fillellipse(4,5,20,10); pieslice(int x, int y, int stangle, int endangle, int radius); – wycinek koła sektor(int x, int y, int stangle, int endangle, int xradius, yradius); – wycinek elipsy.

  26. Teksty w trybie graficznym settextjustyfy(int horiz, int vert); – tryb justowania tekstu dla poziomego horiz ( LEFT_TEXT – 0) i pionowego vert (BOTTOM_TEXT – 0) settextjustyfy(0,0); settextstyle(int font, int direction, int charsize); – krój pisma –font (SMALL_FONT – 2), kierunek wysyłania znaków na ekran –direktion (HORIZ_DIR), rozmiar znaków –charsize. settextstyle(2,HORIZ_DIR,5); outtext(const char *textstring); – wyświetla w aktualnym oknie łańcuch znaków wskazanych parametrem textstring od aktualnej wartości wskaźnika ekranu. outtext(*napis); outtextxy(int x, int y, const char *textstring); – wyświetla w aktualnym oknie łańcuch znaków wskazanych parametrem textstring przy zachowaniu aktualnych parametrów tekstowych począwszy od punktu (x,y). outtextxy(34,45,*napis);

  27. Program graficzny do rysowania prostej grafiki #include <graphics.h> #include <iostream.h> #include <conio.h> int inicjuj_grafike(int gdriver, int gmode, char *pathgdriver); int main() { int ster=DETECT, tryb,tab[]={10,430,60,450,50,460,5,470}; if (!inicjuj_grafike(ster, tryb, "c:\\studenci\\cpp\\borlandc\\bgi")) return 0; Blok instrukcji do rysowania prostej grafiki getch(); closegraph(); } int inicjuj_grafike(int gdriver, int gmode, char *pathgdriver) { initgraph (&gdriver, &gmode, pathgdriver); if (graphresult()!=grOk) { cout<<"Blad w czasie uruchomienia grafiki"; return 0; } else return 1; } graf-i.exe

  28. Blok instrukcji do rysowania prostej grafiki setbkcolor(15); //kolor tla - bialy putpixel(100,5,4); //rysowanie punktu (kolor czerwony) setcolor(4); //kolor rysowania - czerwony settextstyle(10,HORIZ_DIR,0); //ustawienie stylu tekstu outtextxy(105,5,"- putpixel(100,5,4);- punkt"); //wyprowadzenie tekstu moveto(20,40); //ustalenie aktualnego polozenia wskaznika setcolor(2); lineto(100,40); //rysowanie linii do punktu setcolor(1); setlinestyle(0,0,3); //ustawienie stylu linii (ciagla pogrubiona) line(20,60,100,60); outtextxy(105,60,"- line(20,60,100,60);- ostatnia linia "); setcolor(5); circle(50,100,20); //rysowanie okregu outtextxy(105,100,"- circle(50,100,20);- okrag "); setcolor(6); ellipse(50,140,0,270,30,10); //rysowanie elipsy outtextxy(105,140,"- ellipse(50,140,0,270,30,10);- elipsa "); setcolor(7); arc(50,180,100,250,20); //rysowanie luku outtextxy(105,180,"- arc(50,180,100,250,20); -luk");

  29. Blok instrukcji do rysowania prostej grafiki cd setcolor(1); setfillstyle(4,4); //ustawienie stylu wypelnienia fillellipse(50,230,40,15); //rysowanie elipsy wypelnionej outtextxy(105,215,"- setfillstyle(4,4); - wypelnienie"); outtextxy(105,230,"- fillellipse(50,230,40,15);- elipsa wypelniona"); setfillstyle(1,12); pieslice(50,280,150,270,35); //rysowanie wycinka kola outtextxy(105,280,"- setfillstyle(1,12); - wypelnienie"); outtextxy(105,295,"- pieslice(50,280,150,270,35);- wycinek kola"); setfillstyle(5,4); rectangle(10,320,100,350); //rysowanie prostokata bar(10,320,100,350); //wypelnienie obszaru prostokatnego outtextxy(105,330,"- bar(10,320,100,350); - wypelnienie obszaru prostokatnego"); outtextxy(105,345,"- rectangle(10,320,100,350); - rysowanie prostokata"); bar3d(10,380,60,410,20,1); //trojwymiarowy prostopadloscian outtextxy(105,380,"- bar3d(10,380,60,410,20,1); -trojwymiarowy prostopadloscian"); settextstyle(4,HORIZ_DIR,0); setcolor(11); drawpoly(4,tab); //rysowanie lamanej outtextxy(105,430,"-drawpoly(4,tab); -rysowanie lamanej");

  30. Tarcza #include <graphics.h> #include <iostream.h> #include <conio.h> void main() { int gdriver=DETECT, gmode; initgraph (&gdriver, &gmode, "c:\\studenci\\cpp\\borlandc\\bgi"); setbkcolor(0); setcolor(4); setlinestyle(0,0,3); for(int j=0,t=1;j<100,t<10;j=j+25,t++) { setcolor(t); for (int i=0;i<25;i++) { circle(320,240,j+i); } } getch(); closegraph(); } tarcza.exe

  31. Pawie oczko #include <graphics.h> #include <iostream.h> #include <conio.h> void main() { int gdriver=DETECT, gmode; initgraph (&gdriver, &gmode, "c:\\studenci\\cpp\\borlandc\\bgi"); setbkcolor(0); setcolor(4); setlinestyle(0,0,3); for(int j=0,t=1;j<100,t<10;j=j+25,t++) { setcolor(t); for (int i=0;i<25;i++) { circle(j+i,240,j+i); } } getch(); closegraph(); } pawie.exe

  32. Spirala – funkcja rekurencyjna #include <graphics.h> #include <iostream.h> #include <conio.h> const double alpha=20; void spirala (double lg, double x, double y); int inicjuj_grafike(int ster, int tryb, char *scster); int main() { int gdriver=DETECT, gmode, errorcode; if (!inicjuj_grafike(gdriver, gmode, "c:\\studenci\\cpp\\borlandc\\bgi")) return 0; setbkcolor(14); setcolor(4); setlinestyle(0,0,3); moveto(150,100); spirala (getmaxx()/2,getx(),gety()); getch(); closegraph(); } spirala.exe

  33. Spirala – funkcja rekurencyjna cd. int inicjuj_grafike(int ster, int tryb, char *scster) { initgraph (&ster, &tryb, scster); if (graphresult()!=grOk) { cout<<"Blad"; return 0; } else return 1; } void spirala (double lg, double x, double y) { if (lg>0) { lineto (x+lg,y); lineto (x+lg,y+lg); lineto (x+alpha, y+lg); lineto (x+alpha, y+alpha); spirala (lg-2*alpha, x+alpha, y+alpha); } } funkcja rekurencyjna

More Related