注册 登录
编程论坛 C图形专区

【求助】关于图形函数

hewenhao 发布于 2007-01-22 13:02, 812 次点击

源程序如下:
#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 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;
}
}

该程序的功能:将程序所画图形均分四块利用getimage()函数保存到内存中,然后利用putimage()函数将其恢复,但是运行到第三块区域的时候,就会报错,退出图形模式输出Error: not enough heap space in save_screen().,这是何故呀?

[此贴子已经被作者于2007-1-22 13:03:26编辑过]

3 回复
#2
一笔苍穹2007-01-24 10:40
区域太大,存不下去了
#3
hewenhao2007-01-24 19:04

那为什么buf[0]和buf[1]能申请得到,而buf[2]就申请失败呢?

#4
hewenhao2007-01-24 19:31
dos中最多可以申请多大的内存空间呀?
1