C语言

A 开头函数 B 开头函数 C 开头函数 D 开头函数 E 开头函数 F 开头函数 G 开头函数 H 开头函数 I 开头函数 K 开头函数 L 开头函数 M 开头函数 O 开头函数 P 开头函数 R 开头函数 S 开头函数 T 开头函数 U 开头函数 V 开头函数 _ 开头函数 转换函数 诊断函数 接口函数 字符判别函数 目录函数 输入输出函数 数学函数 操作函数 进程函数 字符串操作函数 时间日期函数 存储分配函数 assert.h头文件 alloc.h头文件 ctype.h头文件 dir.h头文件 dos.h头文件 errno.h头文件 fcntl.h头文件 float.h头文件 graphics.h头文件 io.h头文件 limits.h头文件 malloc.h头文件 math.h头文件 mem.h头文件 process.h头文件 setjmp.h头文件 share.h头文件 signal.h头文件 stdarg.h头文件 stddef.h头文件 stdio.h头文件 stdlib.h头文件 string.h头文件 time.h头文件 values.h头文件

函数名: getimage
功  能: 将指定区域的一个位图存到主存中
用  法: #include <graphics.h>
        void far getimage(int left, int top, int right, int bottom, void far *bitmap);
程序例:

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <alloc.h>

void save_screen(void far *buf[4]);
void restore_screen(void far *buf[4]);

int maxx, maxy;

int main(void)
{
   int gdriver=DETECT, gmode, errorcode;
   void far *ptr[4];

   /* auto-detect the graphics driver and mode */
   initgraph(&gdriver, &gmode, "");
   errorcode = graphresult(); /* check for any errors */
   if (errorcode != grOk)
   {
      printf("Graphics error: %s\n", grapherrormsg(errorcode));
      printf("Press any key to halt:");
      getch();
      exit(1);
   }
   maxx = getmaxx();
   maxy = getmaxy();

   /* draw an image on the screen */
   rectangle(0, 0, maxx, maxy);
   line(0, 0, maxx, maxy);
   line(0, maxy, maxx, 0);

   save_screen(ptr);    /* save the current screen */
   getch();             /* pause screen */
   cleardevice();       /* clear screen */
   restore_screen(ptr); /* restore the screen */
   getch();             /* pause screen */

   closegraph();
   return 0;
}

void save_screen(void far *buf[4])
{
   unsigned size;
   int ystart=0, yend, yincr, block;

   yincr = (maxy+1) / 4;
   yend = yincr;
   size = imagesize(0, ystart, maxx, yend); /* get byte size of image */

   for (block=0; block<=3; block++)
   {
      if ((buf[block] = farmalloc(size)) == NULL)
      {
         closegraph();
         printf("Error: not enough heap space in save_screen().\n");
  exit(1);
      }

      getimage(0, ystart, maxx, yend, buf[block]);
      ystart = yend + 1;
      yend += yincr + 1;
   }
}

void save_screen(void far *buf[4])
{
   unsigned size;
   int ystart=0, yend, yincr, block;

   yincr = (maxy+1) / 4;
   yend = yincr;
   size = imagesize(0, ystart, maxx, yend); /* get byte size of image */

   for (block=0; block<=3; block++)
   {
      if ((buf[block] = farmalloc(size)) == NULL)
      {
         closegraph();
         printf("Error: not enough heap space in save_screen().\n");
  exit(1);
      }

      getimage(0, ystart, maxx, yend, buf[block]);
      ystart = yend + 1;
      yend += yincr + 1;
   }
}

void restore_screen(void far *buf[4])
{
   int ystart=0, yend, yincr, block;

   yincr = (maxy+1) / 4;
   yend = yincr;

   for (block=0; block<=3; block++)
   {
      putimage(0, ystart, buf[block], COPY_PUT);
      farfree(buf[block]);
      ystart = yend + 1;
      yend += yincr + 1;
   }
}