功能: 函数getimage()保存左上角与右下角所定义的屏幕上像素图形到指定的内存区域。
用法: 该函数调用方式为void getimage(int left,int top,int right,int bottom,void *buf)
说明: 函数中参数(left,top)为要保存的图像屏幕的左上角,(right,bottom)为其右下角,buf指向保存图像的内存地址。调用getimage()保存屏幕图像,可用imagesize()函数确定保存图像所需字节数,再用malloc()函数分配存储图像的内存(内存分配必须小于64KB),还可以用下面函数putimage()输出getimage()保存的屏幕图像。
这个函数对应的头文件为graphics.h
返回值: 无
例: 把带有两对角线的矩形拷贝到屏幕其它位置上:
#include<garphics.h>
#include<stdlib.h>
#include<conio.h>
void main()
{
int driver,mode
unsigned size
void *buf
driver=DETECT
mode=0
initgraph(&driver,&mode,"")
sector(15)
rectangle(20,20,200,200)
setcolor(RED)
line(20,20,200,200)
setcolor(GREEN)
line(20,200,200,20)
getch()
size=imagesize(20,20,200,200)
if(size!=-1){
buf=malloc(size)
if(buf){
getimage(20,20,200,200,buf)
putimage(100,100,buf,COPy_PUT)
putimage(300,50,buf,COPy_PUT)
}
}
outtext("press a key")
getch()
restorecrtmode()
这是tc 一个图形库函数的实现void fgetimage(char *s,int x0,int y0,int x1,int y1) /*拷贝图像*/
{register int j,n[4]={256,512,128,384}
int tempregister char page_new,page_old,page_end
register long position
register char *p=MK_FP(0xa000,0000)
register FILE *fp
if((fp=fopen(s,"wb"))==NULL)return
fseek(fp,0,SEEK_SET)
temp=x1-x0+1fwrite(&temp,2,1,fp)
temp=y1-y0+1fwrite(&temp,2,1,fp)
page_old=8
selectpage(page_old)
for(j=y0j<=y1j++)
{position=640l*j+x0
page_new=position/65536
page_end=(position+x1-x0+1)/65536
if(page_new!=page_old)
{selectpage(page_new)page_old=page_new} /*处理跳行跨页*/
if(page_new!=page_end) /*处理显示行跨页*/
{fwrite(p+position%65536,n[page_new]-x0,1,fp)
selectpage(page_new+1)
fwrite(p,x1-n[page_new]+1,1,fp)
selectpage(page_new)
}
else fwrite(p+position%65536,x1-x0+1,1,fp)
}
fclose(fp)
}
基本没必要知道内部存储数据的方法 这根据具体实现有关
不过你说的这目的 得用比较高级的库了 因为vc tc的实现都是简单把这结构当作一个 “缓存”
so 只能找些开源图形库看了