Download presentation
Presentation is loading. Please wait.
1
15 лекция Графикалық режим (жалғасы)
2
Сұрақтар: 3. Терезе ашу функциясы Экран түсін өзгерту
2. Іші боялған тұйық сызықтар салу 3. Терезе ашу функциясы 4. Мысалдар
3
1. Экран түсін өзгерту 1. Экранның фоны түсін келесі функция арқылы өзгерте аламыз setbkcolor(түсі); 2. Экранды тазалау мына функция көмегімен орындалады cleardevice(); Осыған дейін графикалық функциялар арқылы орнатылған параметрлер өшіріледі де, (үнсіз) келісім бойынша берілген алғашқы параметрлер қалпына келтіріледі.
4
// Тустердi озгерту мысалдары setbkcol.cpp
#include <conio.h> #include <stdlib.h> #include <graphics.h> void main ( ) { int gd=DETECT,gm,r; initgraph(&gd, &gm,"C:\\TC\\BGI"); setbkcolor(RED); setcolor(GREEN); rectangle(100,100,250,250); bar(300,100,610,250); circle(175,350,95); fillellipse(455,350,80,50);
5
getch(); cleardevice();
setbkcolor(YELLOW); setcolor(BLUE); for(r=1; r<200; r++) circle(320,240,r); setbkcolor(BROWN); setcolor(WHITE); rectangle(75,80,550,400); circle(320,240,150); getch(); closegraph(); }
6
2. Іші боялған тұйық сызықтар салу
Іші боялған көпбұрыш салу үшін қолданылатын функция fillpoly (n,бүтін сандар жиымы); мұндағы n – төбелер саны. Әрбір төбе координатасы екі бүтін санмен бері-леді. Бұл функция төбелердің алғашқы нүктесін соңғы нүктесімен қосып, сызықтарды тұйықтап, ішін бояйды. Сызық типі мен бояу түсі setfillstyle() және setfillpattern() функцияларымен анықталады.
7
мұндағы х, у – центр координаталары;
Іші боялған контурлы эллипс салу функциясы fillellipse (х,у, rх,rу); мұндағы х, у – центр координаталары; rх, rу – пикселмен берілген эллипс жарты өстері радиустары. Эллипс өстері координат өстеріне параллель болады. Эллипс ағымдағы түспен боялып шығады. Іші боялған контурлы эллипс секторын салатын функция sector (x, у, бұрыш_басы, бұрыш_соңы, rх, rу); Бұл функция pieslice() функциясы тәрізді жұмыс істейді.
8
Тұйық сызықпен қоршалған аймақтың ішін бояу функциясы
floodfill (x,у, шекара); мұндағы х, у – боялатын аймақ ішіндегі нүкте координатасы. Тұйық аймақты қоршаған сызық контурында тесік болмауы тиіс, әйтпесе бояу бүкіл экранды сол түске бояп жібереді. Контур түсі шекара түсімен бірдей болуы тиіс. Бояу түсі мен типі setfillstyle() функциясымен орнатылады.
9
//боялған шеңберлер, эллипстер kr_krug.cpp
#include <conio.h> #include <stdlib.h> #include <graphics.h> void main ( ) { int gd=DETECT,gm,r,x=120,y=240; initgraph(&gd, &gm,"C:\\TC\\BGI"); setcolor(RED); //сызықтар жасыл түсті setbkcolor(BLUE); //фон көк түсті for(r=0; r<80; r++)//концентрлі circle(x,y,r); //80 қызыл шеңбер салу setfillstyle(SOLID_FILL,RED); x+=200; circle(x,y,80); //қызыл шеңбер floodfill(x,y,RED); // іші де қызыл
10
x+=200; fillellipse(x,y-150,80,50);//қызыл эллипс setfillstyle(SOLID_FILL,GREEN); fillellipse(x,y,80,50); //жасыл эллипс setfillstyle(SOLID_FILL,YELLOW); fillellipse(x,y+150,80,50); //сары эллипс getch(); closegraph(); }
11
// боялған көпбұрыш draw3col.cpp
#include <graphics.h> #include <conio.h> #include <stdio.h> main () { int gdriver=DETECT,gmode; int x,y,t[14]={450,150, 500,350, 400,400, 150,400, 50,150, 250,80,450,150}; initgraph (&gdriver,&gmode,"C:\\TC\\bgi"); setcolor(RED); setfillpattern(0,BLUE); fillpoly(7,t); settextstyle(3,HORIZ_DIR,1); outtextxy(458,135,"C(450,150)"); outtextxy(508,335,"D(500,350)"); outtextxy(400,400,"E(400,400)"); outtextxy(150,400,"F(150,400)"); outtextxy(38,138,"A (50,150)"); outtextxy(243,55,"B(250,80)"); getch(); closegraph(); }
12
// 7 боялған сақина бейнесі colec7.cpp
#include <conio.h> #include <stdlib.h> #include <graphics.h> void main ( ) {int gd=DETECT,gm,i,x=320,y=240; initgraph(&gd, &gm,"C:\\TC\\BGI"); setlinestyle(0,0,1); setbkcolor(GREEN); for(i=7;i>=1;i--) if (i%2) { setcolor(BLUE); circle(x,y,5*i); setfillstyle(SOLID_FILL,BLUE); floodfill(x,y,BLUE); }
13
else { setcolor(RED); circle(x,y,5*i); setfillstyle(SOLID_FILL,RED); floodfill(x,y,RED); } getch(); closegraph();
14
3. Терезе ашу функциясы Графикалық режимде экран ішінде өз координа-талық жүйесі бар төртбұрышты басқа терезе ашу қолданылатын функция setviewport (x1, y1, x2, y2, clip); мұндағы x1, y1 – терезенің сол жақ жоғарғы бұрышы координаталары; x2, у2 – оң жақ төменгі бұрышы координаталары; clip – қию параметрі. Егер clip параметрі 1 болса, онда терезеге сыймайтын бейне элементтері қиылып алынып тасталады; ал егерде ол – 0 болса, терезе шекаралары есепке алынбай, бейне толық экранда көрсетіледі. Бұл функция дұрыс орындалса, графикалық курсор терезенің координаталар басына орналасады. Терезені тазалау функциясы clearviewport ();
15
Графикалық режимді ауыстыру үшін, яғни уақытша мәтіндік режимге ауысу мақсатында мынадай функция қарастырылған restorecrtmode(); Ол initgraph() функциясын пайдаланғанға дейінгі болған мәтіндік режимді қайта орнатады; буферде (экран көрінісі де) сақталған мәтін қалпына келмейді, өйткені ол initgraph()функциясы арқылы өшірілген болатын. Графикалық режимге қайтып оралу мына функция арқылы атқарылады setgraphmode (gm); функция аргументі ретінде қолданылған драйверге қатысты режимнің бүтін сан түріндегі нөмірі қарастырылады.
16
Егер бұрынғы графикалық режимнің нөмірі алдына ала төмендегі функция арқылы
getgraphmode ( ); анықталып есте сақталса, оны қайта орнатуға болады. Қолданылып отырған драйверге қатысты графика-лық режимнің максималды мәнін мынадай функ-циямен анықталады getmaxmode ( ); Гафикалық режимнен шыққан соң, оған бөлініп берілген жады бөлігін босату үшін, яғни бейнеадаптер буферін тазартып, бұған дейінгі мәтіндік режимді қалпына келтіру әрекетін мына функция орындайды closegraph ( );
17
4. Мысалдар //параллелепипед салу paral_d.cpp #include <stdio.h>
#include <stdlib.h> #include <conio.h> #include <graphics.h> void main () { int gd=DETECT,gm,i,x,y; initgraph (&gd,&gm,"c:\\TC\\bgi"); setbkcolor(WHITE); setcolor(GREEN); bar3d (230,50,250,150,15,1); bar3d (220,150,260,180,15,1); bar3d (300,150,340,180,15,0); bar3d (300,50,340,150,15,1); getch(); closegraph(); }
18
//Диагональ сызу,жаңа терезелер ашу primer3.cpp
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <graphics.h> void main () {int gd=DETECT,gm,x,y; initgraph (&gd,&gm,"c:\\TC\\bgi"); /*красная диагональ в 3 пиксела на зеленом экране */ setbkcolor(GREEN) ; setcolor(RED); setlinestyle(SOLID_LINE,0,3); x=getmaxx(); y=getmaxy(); printf(" xmax=%d ymax=%d ",x,y); line(0,0,x,y); // после нажатия на клавишу очистим экран
19
getch(); cleardevice();
// Определяем окно и очищаем его setviewport(100,100,600,400,1); clearviewport(); setcolor(GREEN); rectangle(10,30,450,255); circle(230,145,55); settextstyle(DEFAULT_FONT,HORIZ_DIR,3); //русские буквы только в DEFAULT_FONT setbkcolor(BLUE); setcolor(WHITE); //Текст в левом верхнем углу нового окна outtextxy(1,1,“Вот новое окно"); getch(); closegraph(); }
20
// Жазуы бар секторлар sector2.cpp
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <graphics.h> void main () { int gd=DETECT,gm,i,x,y; initgraph (&gd,&gm,"c:\\TC\\bgi"); setcolor(BLACK); setbkcolor(BLUE); setwritemode(XOR_PUT); setfillstyle(WIDE_DOT_FILL,RED); pieslice(200,100,45,90,50);
21
setbkcolor(BLUE); setcolor(RED);
setfillstyle(1,3); x=getmaxx()/2; y=getmaxy()/2; pieslice(x,y,270,360,100); setfillstyle(1,2); pieslice(x,y,0,270,100); settextstyle(1,0,2); moveto(x-20,y-40); outtext("75%"); moveto(x+20,y+20); outtext("25%"); getch(); closegraph(); }
22
#include <stdio.h> // primera.cpp
#include <conio.h> #include <stdlib.h> #include <graphics.h> #define BGIPATH "C:\\TC\\bgi" #define ESC 27 // Коды клавиш от getch() #define UP_ARROW 72 #define DOWN_ARROW 80 #define RIGHT_ARROW 77 #define LEFT_ARROW 75 void Initialize(); void MoveRec() ; int GraphDriver; int GraphMode; int MaxX, MaxY; //макс-ное разрешение экрана int MaxColors; //макс.доступное число цветов int ErrorCode; //код завер-ия граф. ф-ции void main () { Initialize(); MoveRec(); closegraph(); }
23
void Initialize() { detectgraph (&GraphDriver, &GraphMode); initgraph (&GraphDriver, &GraphMode, BGIPATH); ErrorCode = graphresult(); if (ErrorCode != grOk ) { printf (“Ошибка инициализации: %s\n", grapherrormsg(ErrorCode)); exit(1); } //Определяем максимальное число цветов MaxColors = getmaxcolor()+1; //Определяем размер экрана MaxX = getmaxx(); MaxY = getmaxy();
24
void MoveRec() { int i, x, y, xl, yl, x2, y2; int scalex=1, scaley=1; setbkcolor(BLUE); setfillstyle(1, WHITE); //прямоугольник в центре – начальная позиция xl=MaxX/2-70; yl=MaxY/2-20; x2=MaxX/2+70; y2=MaxY/2+20; bar(xl, yl, x2, y2); //Ожидать нажатия клавиши. Выход - <ЕSC> for(i=getch(); i!=ESC; i=getch()) if (i) continue;//Алфавитно-цифровая клавиша
25
switch (getch ()) {case UP_ARROW : x=0; y=-1; break; case DOWN_ARROW : x=0; y=1; break; case RIGHT_ARROW: x=1; y=0; break; case LEFT_ARROW : x=-1; y=0; break; default : continue; } // Не вышли ли за границу экрана? if((xl+x*scalex<0) || (x2+x*scalex>MaxX)) x=0; if((yl+y*scaley<0) || (y2+y*scaley>MaxY)) y=0;/* Удалить и закрасить цветом фона */ setfillstyle(1, BLUE); bar(xl, yl, x2, y2); /* Нарисовать новый прямоугольник */ setfillstyle(1, RED); xl+=x*scalex; x2+=x*scalex; yl+=y*scaley; y2+=y*scaley; }
26
Тыңдағандарыңызға рахмет!
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.