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

求助图形显示

Karl168 发布于 2007-09-23 19:14, 1366 次点击
各位大虾,小弟刚学C语言在这里请教一个问题.
昨天我编好一个图形程序,在turbo c上已经通过编译,且点击运行时能显示其图形了,
但当我单独运行其EXE文件时却不能显示图形,错误提示为BGI ERROR。
小弟冥思苦想了两天始终解决不了。
希望大虾能帮忙。
6 回复
#2
starrysky2007-09-23 19:53

不好意思,我这个版主是专攻 OpenGL 的,对于 TC 的图形设计没有什么发言权。
不过,最迟明天,一笔苍穹 或是 JPG 就会帮你解决的。他们今天好像没上线。

不过,根据我的编程经验,出现这种情况,如果你的程序没错,那么多半就是程序运行时的链接问题了。
那要看看你是否用到某些动态库,在单独运行EXE文件时没有加载。因为在TC中编译时,这些库 编译器都帮你加载好了。

[此贴子已经被作者于2007-9-23 19:53:29编辑过]

#3
starrysky2007-09-23 19:57
你用的TC 是 TC 2么?
#4
starrysky2007-09-23 20:00

刚才查了下百度,
[QUOTE]
BGI Error: Graphics not initialized (use 'initgraph') 错误的处理方法

Tag: BGI error 在源程序中,放在c:\turbo2下面可以运行,放到其他的目录下不能运行,是因为c:\turbo2下面有egavga.bgi这个文件(这是一个驱动文件),而其他目录下没有。

解决方法有两个:
一:将egavga.bgi和程序一同拷贝到同一个文件夹下。
二:建立一个不需要驱动程序就能独立运行的可执行图形程序,Turbo C中规定用下述步骤(这里以EGA、VGA显示器为例):
1. 在C:\TC子目录下输入命令:BGIOBJ EGAVGA
此命令将驱动程序EGAVGA.BGI转换成EGAVGA.OBJ的目标文件。
2. 在C:\TC子目录下输入命令:TLIB LIB\GRAPHICS.LIB+EGAVGA
此命令的意思是将EGAVGA.OBJ的目标模块装到GRAPHICS.LIB库文件中。
3. 在程序中initgraph()函数调用之前加上一句:
registerbgidriver(EGAVGA_driver);
这样子生成的程序,就可以独立运行。

[/QUOTE]

你看看这样能不能解决
#5
奔跑的鸟2007-09-23 21:39
楼上正解,斑竹果然很强
#6
Karl1682007-09-23 23:28

版主,情况出现的跟你上面说的一模一样,我今晚会试一下的.
非常感谢你的帮助.
在此向你鞠躬了!
呵呵~

#7
eternitelove2007-12-06 10:49
斑竹 我的问题是TC的图形界面的东东根本不能运行
和很多人的问题一样 不是遇到16位什么什么 就是一闪而过
比如
  /* 烟花程序 */
  #include <stdio.h>
  #include <conio.h>
  #include <dos.h>
  #include <math.h>
  #include <graphics.h>
  #include <bios.h>
  #include <stdlib.h>
  #define  PI 3.14159

  void moon()
{
  int x=50,y=50,n=30;
  setcolor(YELLOW);
  setfillstyle(1,YELLOW);
  ellipse(x,y,0,360,n,n);
  ellipse(x+n/2,y,90,270,n,n);
  floodfill(x-n+3,y,YELLOW);
  setcolor(BLACK);
  circle(x,y,n);
  circle(x+n/2,y,n);
}

  void star(int x, int y)
{

  int i,a;
  int n=5;
  int x1[5],y1[5],x2[5],y2[5];
  setcolor(YELLOW);

  for (i=0;i<5;i++)
    {
      x1[i]=x+n*cos(i*72*PI/180);
      y1[i]=y+n*sin(i*72*PI/180);
      x2[i]=x+n/2*cos(i*72*PI/180+PI/5);
      y2[i]=y+n/2*sin(i*72*PI/180+PI/5);
    }

  for(i=0;i<5;i++)
    {
      a=i+1;
      if(a>4) a=0;
      line(x1[i],y1[i],x2[i],y2[i]);
      line(x2[i],y2[i],x1[a],y1[a]);
    }
}

  void drawstar()
{
  int a[]={70,250,190,400,150};
  int b[]={43,27,38,79,90},i;

  setfillstyle(1,14);
  for(i=0;i<5;i++)
   {
     star(a[i],b[i]);
     floodfill(a[i],b[i],YELLOW);
   }
}

  void starflower()
{
  int i=0,j,n=60,n1=2;
  int x=200,y=200,size=100;
  int cover=0;
  int delay1=5000;
  int wid,hei;
  int px,py;
  int color=9;

  while(!kbhit())
   {
     if(i<size)
       {
         for(j=0;j<n;j++)
          {
            px=x+i*cos(j*360/n*PI/180);
            py=y+i*sin(j*360/n*PI/180);
            putpixel(px,py,rand()%16);
            putpixel(px-1,py,color);
            putpixel(px,py+1,color);
            putpixel(px+1,py-1,YELLOW);
            putpixel(px,py-1,YELLOW);
            putpixel(px+1,py,RED);
            putpixel(px+1,py+1,RED);
          }
        }

    if(i>size && cover<size)
      {
        setcolor(BLACK);
        circle(x,y,cover++);
        delay1=1000;
      }
    if(cover==size)
      {
        i=0;
        x=50+rand()%550;
        y=rand()%400;
        cover=0;
        color=rand()%16;
        size=50+rand()%250;
        delay1=10000;
        clearviewport();
        drawstar();
        moon();
      }
    i+=n1;
    delay(delay1);
  }
}
  void main()
{
   int i,j,k;
   int gdriver = DETECT, gmode;
  /* registerbgidriver(EGAVGA_driver); */
   /*int gdriver = VGA, gmode = VGAHI;*/  /* 修改 */
   /*registerbgidriver(EGAVGA_driver); */ /* 修改 */
   initgraph(&gdriver,&gmode,"D:\\tc");
   drawstar();
   moon();
   starflower();
}
用的TC2.0 装在D:\tc,XP的环境
1