2. ДИНАМИКАЛЫҚ АЙНЫМАЛЫЛАРДЫ ҚОЛДАНУ
2.1 Суреттермен жұмыс істейтін функциялар
Суреттермен жұмыс кезінде экранда статистикалық кескіндерді құруға, оларды бірнеше бейнебеттерде сақтауға және де керек кезінде оны көрінетіндей етіп істеуге болады. Әр түрлі суреттерді құрған кезде оларды операциялық жадыда немесе файлда сақтап, ал содан соң керек кезде оларды экранға шығаруға болады. Жадыда сақталған суреттерді экран бойымен қозғалтуға болады. Егер бір объектінің бірнеше қозғалыс фазасы жатталса, онда сол суреттерді көрген кезде сол объетінің қозғалыс иллюзиясын келтіруге болады. Суреттерді сақтау, қолғалысқа түсіру үшін динамикалық айнымалылар қолданылады. Динамикалық айнымалыларды графикалық режимде қолданылуының себебі олар прорамманың орындалу процессі жүрген кезде кейіннен қайта құру мақсатымен экранның әрбір учаскілерін сақтайды. Суретті салу үшін келесідегідей фигураларды құру функцияларды қолдануға болады.
1. Нүктелерден: putpixel;
2. Сызықтардан: line, linerel, lineto, drawpoly;
3. Тік бұрышты фигуралардан: bar, bar3d,rectangle;
4. Қисық сызықты фигуралардан: arc, circle, ellipse, fillellips, sector;
Суреттерді сақтау және кейіннен қолдану үшін келесі функциялар қолданылады: getimage, imagesize, putimage. Ал биттік суреттерді сақтау үшін операциялық жадыдағы керекті көлем malloc функциясының көмегімен алдынала белгіленуі қажет. Берілген тік бұрышты экрандағы биттік суретті сақтауға кажетті операциялық жадының керекті мөлшерін анықтау imagesize функциясының көмегімен іске асырылады. Imagesize функциясының портотипі: unsigned (int left, int top, int right, int botton); мұндағы left, top – тік бұрыштың сол сол жақ жоғарғы бұрышының координаттары; right, botton – тік бұрыштың оң жақ төменгі бұрышының координаттары. Getimage функциясы тік бұрышты экран бөлігіндегі биттік суретті операциялық жадыда сақтайды. Getimage функциясының портотипі: void far getimage (int left, int top, int right, int botton, void far * bitmap); Getimage функциясының параметрлерін тағайындау: left, top – тік бұрыштың сол сол жақ жоғарғы бұрышының координаттары; right, botton – тік бұрыштың оң жақ төменгі бұрышының координаттары; bitmap – операциялық жадыдағы орынды көрсететін типсіз көрсеткіш. Рutimage функциясы экранның берілген тік бұрышты бөлігінде алдынала Getimage функциясымен сақталған суреттерді көрсету үшін арналған. Рutimage функциясының прототипі: void far Putimage (int left, int top, void far * bitmap, int op); мұндағы left, top – тік бұрыштың сол сол жақ жоғарғы бұрышының координаттары; bitmap – Экранда көрсетіліп жатқан суреттің операциялық жадыда сақталатын орнын көрсететін көрсеткіш; op – Пиксель түстерінің шығарылу шарттары.
Келесі программа бойынша экранға ақ квадрат салынады, содан соң ол ақ квадратымыз жадыда сақталынады. Содан соң экранымыз тазаланады да сол ақ квадратымыз экранның басқа бөлігінен шығады.
# include
# include
# include
# include
# include
# include
void main ( )
int gdriver = DETECT, gmode, errorcode;
int n=20, x, dx, y, dy, i ;
void * ptr ;
initgraph (&gdriver, &gmode, “”); // Графикалық режимнің
инициализациялануы
errorcode = graphresult ( );
if (errorcode ! = grOk) // Графикалық режимнің дұрыс
инициализациялануы кезінде
{ printf (“Қате ! Графикалық редактор
табылмады %s \n” , grapherrormsg(errorcode));
printf (“Программаны тоқтату ншін кез келген
батырманы басыңыз:”);
geth ( );
exit (1); // Программа орындалуының аяқталуы
}
// Толығы мен ақ түске боялған орнамент
setfillstyle (1, 15);
bar (10, 30, 40, 60); // Ақ квадраттың салынуы
size = imagesize (10, 30, 40, 60); // Қажет болатын
операциялық жадыдағы орын
ptr = malloc (size);
getimage (10, 30, 40, 60, ptr);
setbkcolor (0); // Фон түсі қара
cleardevice ( ); // Экранды тазалап қара түске бояу
dx = getmaxx ( ) / n; // Квадраттың х бойынша орын
ауыстыру қадамы
dy = getmaxy ( ) / n; // Квадраттың y бойынша орын
ауыстыру қадамы
x = 0; y = 0; // Квадраттың бастапқы координаттары
for (i=1; i<=n; i++)
{ putimage (x. y, ptr, 0); // Ақ квадраттың экранға
шығарылуы
delay (300); // Программаның ұсталу
уақыты
putimage (x, y, ptr, 1); // Ақ квадраттың экраннан
өшірілуі
x = x + dx; // Жаңа координаттарды анықтау
y = y + dy; // Жаңа координаттарды анықтау
}
free (ptr); // Операциялық жадыны квадрат үшін босату
closegraph ( ); // Графикалық режимді жабу
}
Достарыңызбен бөлісу: |