Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lexzii_08 / lexs_11_animaz.doc
Скачиваний:
15
Добавлен:
17.05.2015
Размер:
205.82 Кб
Скачать

Функції для роботи з зображенням

Для збереження зображень і їх послідуючого відтворення використовують функції getimage, imagesize, putimage.

Для того, щоб запам’ятати бітове зображення повинен бути виділений необхідний об’єм пам’яті прямокутника екрану за допомогою функції imagesize.

Її прототип unsigned far imagesize(int left, int top, int right, int bottom); де left, top – координати лівого верхнього кута прямокутника;

right, bottom – координати правого нижнього кута прямокутника.

Функція getimage запам’ятовує в ОП бітове зображення прямокутної частини екрана. Її прототип:

void far getimage(int left, int top, int right, int bottom, void far *bitmap);

Перші 4 параметри подібні попереднім, а bitmap – безтиповий (void) покажчик на область ОП, в якій запам’ятовується зображення прямокутника. Функція putimage призначена для відтворення в заданому місці екрану зображення прямокутника, який запам’ятала функція getimage.

Її прототип:

void far putimage(int left, int top, void far *bitmap, int op);

де left, topкоординати лівого верхнього кута прямокутника;

bitmap – покажчик на область ОП, де зберігається зображення;

ор – умова виведення кольорів пікселів;

Можливі такі значення:

COPY_PUT 0 виведення копії зображення на екран

Для коду кольорів зображення:

XOR_PUT 1 виключне АБО

OR_PUT 2 об’єднуюче АБО

AND_PUT 3 логічне І

NOT_PUT 4 інверсія коду

При використанні значення ор=0 на екран виводиться копія зображення. При виведенні на те ж саме місце екрана того ж зображення з параметром ор=1 старе зображення стирається з екрану.

Приклад формування зображення білого квадрату, потім воно запам’ятовується по адресу, який містить покажчик ptr, після чого екран очищується і виводиться зображення цього ж квадрату в іншому місці екрану.

В програмі використовуються стандартні змінні для графічного режиму, n, і — кількість і номер чергових координат; x, dx, y, dy – координати і їх приріст; size – розмір необхідної ОП; ptr – покажчик на ОП для розміщення копії.

#include <graphics.h>

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <dos.h>

Void main()

{

int gdriverЮTECT, gmode, errorcode;

int n ,x,dx,y,dy,i;

unsigned int size;

void *ptr;

initgraph(&gdriver,&gmode,"");

errorcode=graphresult();

if(errorcode!=grOk)

{

printf("Помилка");

getch();

exit(1);

}

// орнамент – суцільне заповнення білим кольором

setfillstyle(1,15);

bar(10,30,40,60); // малювання білого квадрату

// запрос ОП для квадрату

size=imagesize(10,30,40,60); //розмiр ОП

ptr=malloc(size); // запрос ОП

// запам’ятовування в буфері бітового образу частини пам’яті

getimage(10,30,40,60,ptr);

setbkcolor(0); // колір фону – чорний

cleardevice();

dx=getmaxx()/n; // крок зміщення по х

dy=getmaxy()/n;

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(); // закрити графічний режим

}

/* Кулька ударяється об стінки */

#include<graphics.h>

#include<stdio.h>

#include<conio.h>

#include<dos.h>

void WaitWerticalRetrace()

{

while(inportb(0x3DA)&0x08);

while(!inportb(0x3DA)&0x08);

}

void main(void)

{

int gd=DETECT,gm;

int x,y,dx,dy;

initgraph(&gd,&gm,"");

setbkcolor(1);

x=100;

y=100;

dx=2;

dy=2;

while(!kbhit())

{

setcolor(1);

WaitWerticalRetrace();

circle(x,y,15);

x+=dx;

y+=dy;

if(x>625||x<15)

dx=-dx;

if(y>465||y<15)

dy=-dy;

setcolor(14);

circle(x,y,15); delay(5);

}

closegraph();

}

7

Соседние файлы в папке lexzii_08