Функция возвращает размер буфера (в байтах), необходимого для сохранения прямоугольного участка экрана дисплея, задаваемого двумя диагонально противоположными точками - (x_first, y_first) и (x_second, y_second).
long _imagesize( short x_first, short y_first, short x_second, short y_second );
Функция определяет размер буфера по следующим формулам:
width = abs(x_first-x_second) + 1; height = abs(y_first-y_second) + 1; size=((long)((width * bits_per_pixel + 7) / 8)*(long)height) + 4;
Величина bits_per_pixel, содержит число битов видеопамяти определяющих один пиксел. Этот параметр режима видеоадаптера можно получить через функцию _getvidioconfig().
После вычислений переменная size содержит необходимый размер буфера в байтах.
Теперь приведем программу, иллюстрирующую использование функций _imagesize(), _getimage() и _putimage(). Она переводит видеоадаптер в графический режим и отображает несколько строк текста. Затем она при помощи функции _getimage() записывает участок экрана в буфер памяти. Далее программа отображает этот участок в нескольких соседних местах экрана, создавая иллюзию перемещения изображения.
#include <conio.h> #include <stdlib.h> #include <malloc.h> #include <graph.h>
void main(void) { char _huge *buffer; char text[8]; long imsize; short i, x = 0, width = 60, height = 27;
// выбираем режим видеоадаптера с наибольшим разрешением
if(!_setvideomode(_MAXRESMODE)) exit(1);
sprintf(text, "текстовая строка");
// отображаем на экране несколько строк text
for(i = 1; i < 8; i++) { _settextposition(i, i); _outtext(text); }
// определяем размер буфера для пиктограммы высотой height // и шириой width
imsize = _imagesize(0, 0, width, height);
// резервируем буфер памяти для пиктограммы
buffer = halloc(imsize, 1); if(buffer == NULL) exit(1);
// запоминаем пиктограмму в буфере
_getimage(0, 0, width, height, buffer);
// перемещаем пиктограмму по экрану дисплея
while(x < 400)
// отображаем пиктограмму
_putimage(x++, 0, buffer, _GPSET);
getch(); free(buffer); }