不要什么api库函数介绍之类的
我现在连怎么用c语言画图都不会呀
谢谢
我先在此给你介绍几个基本的(也是比较重要和常用的)几个图形库函数,为了照顾新手的兴趣,并且由于表达水平有限,在此只介绍函数的使用方法,具体原理请查阅其他资料:
图形模式和文本模式是C语言两个的基本模式。文本模式是为了进行简单的字符输入和输出,不能达到做图的目的。
那么首先就要知道如何进入图形模式。
void far initgraph(int far *driver,int far *mode,char far *path)
文件头在graphics.h中
通过这个库函数可以让我们从文本模式进入到图形模式。
driver和mode分别是图形驱动器和模式,path是指图形驱动程序所在的目录路径(因为程序往往在不同的环境下运行,所以一般采用自动搜索形式,既直接把path写成""就行)
图形的显示也有很多模式,如CGA,MCGA,EGA,VGA等。调取这些模式的任务是由driver(图形驱动器)来实现。(具体内容在此不做介绍)
一般情况下我们用DETECT这个常量来完成就可以。当driver=DETECT时,函数将自动检测目前系统屏显硬件的类型,并选用最大分辨率的屏显模式。
相同的图形驱动器下也有不同的模式,因此在一定的图形驱动器下调用不同的图形模式就用mode来实现。当然在driver=DETECT时,mode就不用设置拉。
关于driver和mode对应的分辨率表在此不做介绍。
在此给出几个例子:
#include<graphics.h>
main()
{
int driver,mode;
driver=DETECT;
initgraph(&driver,&mode,"");/*这样你就进入了图形模式*/
getch();
}
[此贴子已经被作者于2006-4-23 19:17:28编辑过]
图片当然少不了颜色!先说明图形模式下一般只能实现0~15色的显示。
getcolor
【功能】返回当前画笔的颜色。
【原型】int far getcolor(void)
setcolor
【功能】设置当前画笔颜色。
【原型】void far setcolor(int color)
通过setcolor可以设置线,多边形、椭圆、圆的边框颜色。还能通过它设置图形模式下的文本输出的颜色。
如果你想填充,那你就会用到:
setfillstyle
【功能】设置填充模式和颜色。
【原型】void far setfillstype(int pattern,int color)
【位置】dos.h
关于pattern有一个填充表,可以去查阅一下资料,取值范围是0~12,其中0是用背景颜色填充,1是实填充,12是用户自定义填充。关于用户自定义填充要用到setfillpattern
setfillpattern
【功能】选择一个用户自定义的填充模式。
【原型】void far setfillpattern(char far *upattern,int color)
【位置】graphics.h
【说明】upattern指向一个8字节的区域,其中定义了一个8*8位的模式。
【参见】fill_patterns,getfillpattern,getfillsettings,setfillstyle
在此不做介绍!
color自然是指填充颜色拉!(0~16)
除此TC还提供一个设置背景的函数:
setbkcolor
【功能】使用调色板设置当前的背景颜色。
【原型】void far setbkcolor(int color)
这个很好理解,作个程序试一下就知道拉!
[此贴子已经被作者于2006-4-23 18:29:50编辑过]
制作图形程序大家最关心的莫过于动画的实现,那我们首先想到的是如何清屏拉:
cleardevice
【功能】清除图形画面。
【原型】void far cleardevice(void)
通过它我们可以清楚屏显上的所有内容(但不能清楚背景颜色)。
clearviewport
【功能】清除当前可视区域。
【原型】clearviewport(void)
可视区域指的是通过setviewport定义的视口
setviewport
【功能】设置图形输出的当前视口。
【原型】void far setviewport(int left,int top,int right,int bottom,int clip)
其中(left, top),(right,bottom)指的是视口的左上角和右下角坐标
其中clip等于1时对定义视口后的超出视口的输出自动修剪,clip等于0时则不修剪。
注意的是当clip=1时,对putimage(见下)的输出不做修剪。
一般在对动画速度要求比较高的情况下不用它。
动画的实现离开不了图形的保存:
imagesize
【功能】返回存储位图所需的字节数。
【原型】unsigned far imagesize(int left,int top,int right,int bottom)
getimage
【功能】将制定区域的位图保存到内存中。
【原型】void far getimage(int left,int top,int right,int bottom,void far *bitmap)
putimage
【功能】在屏幕上输出一副位图。
【原型】void far putimage(int left,int top,void far *bitmap,int top)
【说明】bitmap指向一副位图,该位图通常由getimage函数创建。Op的数值说明如何在(left,top)点将图像与区域中的当前内容结合起来。
通过它们我们可以实现动画的保存。
举个例子来说明:
#include<graphics.h>
#include<stdlib.h>
#include <time.h>
#include <math.h>
main()
{
int gd,gm;
int i,t;
unsigned int size;
void *buf;
gd=DETECT;
initgraph(&gd,&gm,"");
srand((unsigned) time(&t));/*随机函数初始化*/
/******************借此也复习一下以前说过的东西********************/
setcolor(random(15));
setbkcolor(random(15));
circle(200,100,50);
fillellipse(100,200,25,30);
for(i=1;i<100;i++)
{
setfillstyle(1,random(15));
fillellipse(random(100)+200,random(100)+200,random(100),random(100));
}
getch();
size=imagesize(100,100,200,200);/*把存储位图(100,100)到(200,200)所需的字节数给size*/
buf=malloc(size);/*给指针buf分配所需空间*/
getimage(100,100,200,200,buf);/*将(100,100)到(200,200)区域的位图保存到buf中*/
cleardevice();
putimage(250,150,buf,COPY_PUT);/*将buf中的位图放在左上角为(250,150)上*/
getch();
free(buf);/*释放buf*/
closegraph();/*关闭图形模式*/
}
[此贴子已经被作者于2006-4-26 11:08:48编辑过]
在图形模式下也常常需要进行文字输出。想想我们在文本模式下经常用的输出函数————printf putc cprintf fprintf等等。但是如果你曾经进行过图形模式下的文字输出你会发现以前用的输出函数变的很不舒适拉,而且还不能用gotoxy去定位!————这可是太要命拉!!那么在图形模式下就不能象文本模式下那样舒适输出文字吗?
回答自然是否拉!在图形模式下需要一些新的文字输出函数:
outtext
【功能】在视窗中(图形模式)显示一个字符串。
【原型】void far outtext(char far *textstring)
用它就可以!
当然还有一个定位问题:
moveto
【功能】从当前位置(CP)移动到(x,y)点。
【原型】void far moveto(int x,int y)
moveto就类似的相当于文本模式下的gotoxy(当然还有很多不同点,在此不做介绍)
把它们结合在一起你就会随意地在图形模式下进行文字输出拉!
除死之外,还有一个更方便的输入函数,把它们两个进行了中和:
outtextxy
【功能】在指定位置(图形模式)发送一个字符串。
【原型】void far outtextxy(int x,int y,char far *textstring)
为什么说比文本模式下输出更舒适呢?:
settextstyle
【功能】设置当前文本属性。
【原型】void far settextstyle(int font,int direction,int charsize)
其中font是字体的类型,符值范围是0~4 分别是
0:8×8点阵
1:三倍笔划
2:小号笔划
3:无衬线笔划
4:黑体笔划
direction是字体的方向,符值范围是0和1,0时是横向输出字符,1是纵向输出字符
size是字符大小系数,符值范围是0~10
应该注意的是这个函数只是在tc平台下好使,在win-tc下就不灵拉!!!
在使用这几个输出文本函数时可能会发现一个问题,就是outtext只能输入一些常量,不能输出一般的数字变量.解决这个问题的方法就是先把数字转换为字符.这就用到了ltoa(长整数转换成字符串),itoa(整形数转换成字符串),sprintf等函数,这些函数属于变量类型转化函数,在此不做介绍,
学会了这些函数后,基本上就可以看明白这个程序拉∨
http://www.bc-cn.net/bbs/dispbbs.asp?boardID=5&ID=59192&page=2
你可以通过更改其中的一些绘图函数来改变程序运行时的效果,进而体会巩固图形函数的用法.
以上教程比较适合初学者学习C语言的绘图功能.如果想学一些更深入的绘图问题可去看一看相关的书籍.我用的是<turbo c函数大全>感觉还可以
希望谁有什么更好书拿出来让大家分享!!!
[此贴子已经被作者于2006-4-24 14:05:26编辑过]