c语言基本画图函数
c语言基本画图函数基本图形函数包括画点,线以及其它一些基本图形的函数。
本节对这些函数作一全面的介绍。
1、画点I画点函数void far putpixel(int x, int y, int color);该函数表示有指定的象元画一个按color 所确定颜色的点。
对于颜色color的值可从表3中获得而对x, y是指图形象元的坐标。
在图形模式下,是按象元来定义坐标的。
对VGA适配器,它的最高分辨率为640x480,其中640为整个屏幕从左到右所有象元的个数,480为整个屏幕从上到下所有象元的个数。
屏幕的左上角坐标为(0,0),右下角坐标为(639, 479),水平方向从左到右为x 轴正向,垂直方向从上到下为y轴正向。
TURBO C的图形函数都是相对于图形屏幕坐标,即象元来说的。
关于点的另外一个函数是:int far getpixel(int x, int y); 它获得当前点(x, y)的颜色值。
II、有关坐标位置的函数.int far getmaxx(void);返回x轴的最大值。
int far getmaxy(void); 返回y轴的最大值。
int far getx(void); 返回游标在x轴的位置。
void far gety(void); 返回游标有y轴的位置。
void far moveto(int x, int y); 移动游标到(x, y)点,不是画点,在移动过程中亦画点。
void far moverel(int dx, int dy); 移动游标从现行位置(x, y)移动到(x+dx, y+dy)的位置,移动过程中不画点。
2、画线I. 画线函数TURBO C提供了一系列画线函数,下面分别叙述:void far line(int x0, int y0, int x1, int y1); 画一条从点(x0, y0)到(x1, y1)的直线。
void far lineto(int x, int y); 画一作从现行游标到点(x, y)的直线。
void far linerel(int dx, int dy); 画一条从现行游标(x,y)到按相对增量确定的点(x+dx, y+dy)的直线。
void far circle(int x, int y, int radius); 以(x, y)为圆心,radius为半径,画一个圆。
void far arc(int x, int y, int stangle, int endangle,int radius); 以(x,y)为圆心,radius为半径,从stangle开始到endangle结束(用度表示)画一段圆弧线。
在TURBO C中规定x轴正向为0 度,逆时针方向旋转一周,依次为90,180, 270和360度(其它有关函数也按此规定,不再重述)。
void ellipse(int x, int y, int stangle, int endangle,int xradius,int yradius);以(x, y)为中心,xradius,yradius为x轴和y轴半径,从角stangle 开始到endangle结束画一段椭圆线,当stangle=0,endangle=360时,画出一个完整的椭圆。
void far rectangle(int x1, int y1, int x2, inty2); 以(x1, y1)为左上角,(x2, y2)为右下角画一个矩形框。
void far drawpoly(int numpoints, int far *polypoints); 画一个顶点数为numpoints,各顶点坐标由polypoints给出的多边形。
polypoints整型数组必须至少有2 倍顶点数个无素。
每一个顶点的坐标都定义为x,y,并且x在前。
值得注意的是当画一个封闭的多边形时,numpoints的值取实际多边形的顶点数加一,并且数组polypoints中第一个和最后一个点的坐标相同。
下面举一个用drawpoly()函数画箭头的例子。
#include<stdlib.h>#include<graphics.h>int main(){int gdriver, gmode, i;int arw[16]={200,102,300,102,300,107,330,100,300,93,300,98,200,98,200,102};gdriver=DETECT;initgraph(&gdriver, &gmode, "c:\\caic\\bgi");setbkcolor(BLUE);cleardevice();setcolor(12); /*设置作图颜色*/drawpoly(8, arw); /*画一箭头*/getch();closegraph();return 0;}II、设定线型函数在没有对线的特性进行设定之前,TURBO C 用其默认值,即一点宽的实线,但TURBO C也提供了可以改变线型的函数。
线型包括:宽度和形状。
其中宽度只有两种选择:一点宽和三点宽。
而线的形状则有五种。
下面介绍有关线型的设置函数。
void far setlinestyle(int linestyle,unsigned upattern,int thickness); 该函数用来设置线的有关信息,其中linestyle是线形状的规定,见下表。
有关线的形状(linestyle)━━━━━━━━━━━━━━━━━━━━━━━━━符号常数数值含义─────────────────────────SOLID_LINE 0 实线DOTTED_LINE 1 点线CENTER_LINE 2 中心线DASHED_LINE 3 点画线USERBIT_LINE 4 用户定义线━━━━━━━━━━━━━━━━━━━━━━━━━thickness是线的宽度,见下表。
有关线宽(thickness)━━━━━━━━━━━━━━━━━━━━━━━━━符号常数数值含义─────────────────────────NORM_WIDTH 1 一点宽THIC_WIDTH 3 三点宽━━━━━━━━━━━━━━━━━━━━━━━━━对于upattern,只有linestyle选USERBIT_LINE 时才有意义(选其它线型,uppattern取0即可)。
此时uppattern的16位二进制数的每一位代表一个象元,如果那位为1,则该象元打开,否则该象元关闭。
void far getlinesettings(struct linesettingstypefar *lineinfo);该函数将有关线的信息存放到由lineinfo指向的结构中,表中linesettingstype的结构如下:struct linesettingstype{int linestyle;unsigned upattern;int thickness;}例如下面两句程序可以读出当前线的特性struct linesettingstype *info;getlinesettings(info);void far setwritemode(int mode);该函数规定画线的方式。
如果mode=0,则表示画线时将所画位置的原来信息覆盖了(这是TURBO C的默认方式)。
如果mode=1,则表示画线时用现在特性的线与所画之处原有的线进行异或(XOR)操作,实际上画出的线是原有线与现在规定的线进行异或后的结果。
因此,当线的特性不变,进行两次画线操作相当于没有画线。
有关线型设定和画线函数的例子如下所示。
#include<stdlib.h>#include<graphics.h>int main(){int gdriver, gmode, i;gdriver=DETECT;initgraph(&gdriver, &gmode, "c:\\caic\\bgi");setbkcolor(BLUE);cleardevice();setcolor(GREEN);circle(320, 240, 98);setlinestyle(0, 0, 3); /*设置三点宽实线*/setcolor(2);rectangle(220, 140, 420, 340);setcolor(WHITE);setlinestyle(4, 0xaaaa, 1); /*设置一点宽用户定义线*/line(220, 240, 420, 240);line(320, 140, 320, 340);getch();closegraph();return 0;}C语言画图函数与图形有关的函数GRAPHICS.H 库文件bar【功能】画出一条栏目。
【原型】void far bar(int left,int top,int right,int bottom)【位置】graphics.hgraphics.h【参见】bar3d,setfillstyle,rectanglebar3d【功能】画出一条3-D栏目。
【原型】void far bar3d(int left,int top,int right,int bottom,int depth,int topflag)【位置】graphics.h【参见】barcircle【功能】以(x,y)为圆心按照指定的半径画出一个圆。
【原型】void far circle(int x,int y,int radius)【位置】graphics.h【参见】arccleardevice【功能】清除图形画面。
【原型】void far cleardevice(void)【位置】graphics.h【参见】clearviewportclearviewport【功能】清除当前可视区域。
【原型】clearviewport(void)【位置】graphics.h【参见】setviewport,cleardeviceclosegraph【功能】关闭图形系统。
【原型】void far closegraph(void)【位置】graphics.h【参见】initgraphdetecgraph【功能】通过检查硬件确定使用的图形驱动程序和模式。
【原型】void far detectgraph(int far *graphdriver,int far *graphmode) 【位置】graphics.h【参见】initgraph,graphresultdrawpoly【功能】画出一个多边形的轮廓。
【原型】void far drawpoly(int numpoints,int far polypoints[])【位置】graphics.h【说明】polypoints中包括一共numpoints对数值。
C语言图形界面常用函数集锦
C语⾔图形界⾯常⽤函数集锦(以下函数均应在图形⽅式初始之后使⽤(initgraph(a,b)),在win-tc中使⽤BGI图形程序模板时,其中已经定义有⼀个initgr函数,在main 函数中应在执⾏initgr函数之后再使⽤这些函数。
使⽤这些函数时,均应在程序中包含头⽂件graphics.h,即程序开始时应有#include "graphics.h")1、setcolor(⾊彩值):设置绘图⾊彩,使⽤该函数后,图形函数所绘制的直线或曲线为该函数中指定的⾊彩。
例如:setcolor(YELLOW);circle(320,240,100);在屏幕中央以黄⾊绘制半径为100的圆。
2、setbkcolor(⾊彩值):设置图形屏幕的背景⾊彩,使⽤该函数后图形屏幕清屏,背景⾊彩为该函数中所指定的⾊彩。
如果没有使⽤该函数设置背景⾊,则图形屏幕的背景⾊彩为⿊⾊。
3、cleardevice():清除图形屏幕上已经绘制的内容,该函数没有参数。
4、line(x1,y1,x2,y2): 绘制直线段,其中(x1,y1)为⼀个端点的坐标,(x2,y2)为另⼀个端点的坐标。
直线的⾊彩为在使⽤该函数之前通过setcolor函数所设置的⾊彩。
例如:setcolor(WHITE);line(0,240,639,240);绘制⼀条横贯屏幕中间的⽩⾊⽔平直线。
5、circle(x,y,r):绘制⼀个以(x,y)为圆⼼坐标,半径为r的圆。
例如:setcolor(WHITE);circle(320,240,100);绘制⼀个以(320,240)为圆⼼位置,半径为100的圆。
6、rectangle(x1,y1,x2,y2):绘制⼀个以(x1,y1)和(x2,y2)为对⾓端点坐标的矩形7、putpixel(x,y,color):在(x,y)坐标位置处绘制⼀个点,点的⾊彩由color指定。
例如:putpixel(320,240,RED);在屏幕中央绘制⼀个红⾊的点。
C语言图形编程——绘图函数
C语言图形编程——绘图函数一屏幕和视口设置与清除函数36.setviewport() 设置图形视口函数37.clearviewport()清除图形视口函数38.cleardevice() 清除屏幕函数39.getviewsettings() 获取图形视口设置函数二调色板和颜色函数40.setpalette()设置调色板函数41.setallpalette()设置整个调色板函42.setbackcolor() 设置背景颜色函数43.setcolor() 设置颜色函数44.getbkcolor() 返回背景色函数45.getcolor() 返回当前绘图颜色46.getmaxcolor()返回最大颜色值函数47.getpalette() 获取调色板函数48.getpalettesize() 返回调色板大小函数49.getdefaultpalette() 获取缺省调色板函数三屏幕位置函数50.getmaxx()返回最大x坐标函数51.getmaxy() 返回最大y坐标函数52.getx() 返回x坐标函数53.gety() 返回y坐标函数54.moveto()函数55.moverel() 相对移动函数----------------------------------------------------Borland C++提供了一整套综合性的图形函数,上节介绍了其中有关图形显示的函数,本节介绍其中的绘图函数,下节将介绍它的图形文本函数.一般绘图时,首先要清除屏幕,设置图形视口,设置绘图颜色,然后在屏幕上某个位置画点或直线或曲线等.下面给出具有这些功能的函数.一屏幕和视口设置与清除函数36.setviewport() 设置图形视口函数功能: 函数setviewport() 设置当前图形视口.用法: 函数调用方式为void setviewport(int left,int top,int right,int bottom,int clip);说明: 参数left,top是左上角坐标,right,bottom是右下角坐标,它们都是绝对屏幕坐标。
C语言图形编程(三、绘图函数-02)4
C语言图形编程(三、绘图函数-02)4struct linesettingstype info;getlinesettings(&info);63.setwritemode() 设置画线模式函数功能:函数setwritemode() 设置画线模式用法:函数调用方式为 void setwritemode()(int mode);说明:参数mode只有两个取值0和1,若mode为0,则新画的线将复盖屏幕上原有的图形,此为缺省画线输出模式。
如果mode 为1,那么新画的像素点与原有图形的像素点先进行异或(XOR)运算,然后输出到屏幕上,使用这种画线输出模式,第二次画同一图形时,将擦除该图形。
调用setwritemode()设置的画线输出模式只影响函数line(),lineto(),linerel(),recangle()和drawpoly()。
setwritemode()函数对应的头文件是graphics.h返回值:无例:设置画线输出模式为0:setwritemode(0);(三)、多边形函数对多边形,无疑可用画直线函数来画出它,但直接提供画多边形的函数会给用户很大方便。
最常见的多边形有矩形、矩形块(或称条形)、多边形和多边形块,我们还把长方形条块也放到这里一起考虑,虽然它不是多边形,但它的特例就是矩形(块)。
下面直接介绍画多边形的函数。
64. rectangle() 画矩形函数功能:函数rectangle() 用当前绘图色、线型及线宽,画一个给定左上角与右下角的矩形(正方形或长方形)。
用法:此函数调用方式为void rectangle(int left,int top,int right,int bottom);说明:参数left,top是左上角点坐标,right,bottom是右下角点坐标。
如果有一个以上角点不在当前图形视口内,且裁剪标志clip设置的是真(1),那么调用该函数后,只有在图形视口内的矩形部分才被画出。
C语言图形编程(三、绘图函数-02)7
例: 画出两个椭圆扇区:
#include<graphics.h>
#include<stdio.h>
#define R 80
void main()
{
int driver,mode;
int xasp,yasp;
initgraph(&driver,&mode,"");
#include<graphics.h>
void main()
{
int driver,mode;
int i,start,end;
driver=DETECT;
mode=0;
initgraph(&driver,mode,"");
start=0;
end=45;
}
73. pieslice() 画扇区函数
功能: 函数pieslice()使用当前绘图色画一圆弧,并把弧两端与圆心分别连一直线段(即半径),然后用当前填图样和填充色进行填充,即得扇区。
用法: 这个函数调用方式为void pieslice(int x,int y,int startangle,int endangle,int radius);
fillellipse(getmaxx()/2,getaxy()/2,66,44);
getaspectratio(&xasp,&yasp);
fillellipse(R,R,R,R*(long)xasp/(long)yasp);
getch();
closegraph();
struct arccoordstype {
常用C语言图形函数课件
绘图 关闭图形模式
常用C语言图形函数
9
• 图形方式初始化
通过从磁盘上装入一个图形驱动程序 来初始化图形系统,并将系统设置为 图形模式。其调用格式为:
initgraph ( &gdriver, & gmode, path ) ;
常用C语言图形函数
10
若 gdriver = DETECT;则由系统自动检测图形适配器 的最高分辨率模式,并装入相应的图形驱动程序.
/* 画一个三角形 */
getch ( );
closegraph ( );
/*关闭图形系统,返回文本方式 */
}
常用C语言图形函数
17
图形的属性指颜色和线型,颜色又分 为背景色和前景色。 系统的默认值为:背景色为黑色;前 景色为白色;线型为实线。
常用C语言图形函数
18
setbkcolor(背景色);设置背景色
数值
10 11 12 13 14 15
颜色
浅绿色 浅青色 浅红色 浅紫色 黄色 白色
常用C语言图形函数
21
putpixel(x,y,color); 在(x,y)处以color色画一点
例: putpixel(10,20,RED);在(10,20) 处画一红点
getpixel(x,y); 得到(x,y)处的颜色值
• DRAWPOLY 函数:
画一条多边折线。 如:drawpoly ( n,p ) ; 其中,n 为多边折线的顶点数;p 为存放 顶点坐标值的数组名。数组元素个数为2*n . 如果首尾两点重合,则可以绘制一个多边形。
常用C语言图形函数
16
例如: #include “graphics.h ”
main( )
C语言图像函数库详解
例: 在屏幕上(6,8)处画一个红色像素点:
putpixel(6,8,RED);
57. getpixel()返回像素色函数
功能: 函数getpixel()返回像素点颜色值。
用法: 该函数调用方式为int getpixel(int x,int y);
说明: 参数x,y为像素点坐标。
thickness为线宽值存放的变量,可参见表1-11。
getlinesettings()函数对应的头文件为graphics.h
返回值: 返回的线型设置存放在info指向的结构中。
例: 把当前线型的设置写入info结构:
struct linesettingstype info;
getlinesettings(&info);
有三个画直线的函数,即line(),lineto(),linerel()。这些直线使用整型坐标,并相对于当前图形视口,但不一定受视口限制,如果视口裁剪标志clip为真,那么直线将受到视口边缘截断;如果clip为假,即使终点坐标或新的当前位置在图形视口或屏幕极限之外,直线截断到屏幕极限。
有两种线宽及几种线型可供选择,也可以自己定义线图样。下面分别介绍直线和线型函数。
61. setlinestyle() 设置线型函数
62. getlinesettings() 获取线型设置函数
63. setwritemode() 设置画线模式函数
(三)、多边形函数
64. rectangle() 画矩形函数
65. bar() 画条函数
66. bar3d() 画条块函数
用法: 函数调用方式为void getlinesettings(struct linesettingstype *info);
C语言图像处理函数大全
C语言图像处理函数大全,完整版∙∙1.图像平移图像平移只是改变图像在屏幕上的位置,图像本身并不发生变化。
假设原图像区域左上角坐标为(x0, y0),右下角坐标为(x1, y1),将图像分别沿x和y轴平移dx和dy,则新图像的左上角坐标为(x0 +dx, y0+dy),右下角坐标为(x1+dx, y1+dy)。
坐标平移变换公式为:x′ = x +dxy′ = y +dy在屏幕上实现图像的移动分为四个步骤:⑴保存原图像到缓冲区。
⑵擦除原图像。
⑶计算平移后的新坐标。
⑷在新的坐标位置重新显示原图像。
其中,擦除原图像的方法与图形变换中擦除原图形的方法一致,在实现中仍采用XOR异或方式画图擦除原图像。
对于新坐标值的计算还需要考虑边界情况,不要在图像平移后超出允许的屏幕范围。
此外,如果采用C函数getimage()和putimage()来保存和恢复图像,则图像的大小不能超过64K。
2.图像颠倒图像颠倒是指把定义好的图像区域上下翻转地显示在屏幕上。
分析图像颠倒的过程,可发现每行的图像信息都保持不变,而只是改变了行的顺序,将第一行与最后的第n行相互交换,第二行与第n-1行交换……,依此类推,从而实现了图像的颠倒。
只需采用按行交换的方式,即可方便地修改缓冲区内容,实现图像的颠倒。
基本步骤如下:(1) 用getimage()保存原图像,并擦除原图像。
(2) 计算图像的高度,即行数height;计算图像宽度width;计算保存一行图像信息height = bottom -top +1;width = right -left +1;linebytes = (width +7) /8 *4;(3)利用行交换缓冲区linebuf在图像内存缓冲区中进行信息交换,即把第一行与最末行交换,第2行与第n-1行交换……,依此类推,直至全部交换完毕。
(4)把交换后的图像缓冲区内容重新显示在屏幕上。
3.图像镜像变换镜像变换是指将指定区域的图像左右翻转地显示在屏幕。
C语言图形编程(三、绘图函数-02)5
返回值: 无
例: 下面的程序画一个封闭星形图与一个不封闭星形图:
#include<graphics.h>
void main()
{
int driver,mode;
static int polypoints1[18]={100,100,110,120,100,130,120,125,140,140,130,120,
printf("aspect ratio: %f",aspectratio);
69. circle()画圆函数
功能: 函数circle()使用当前绘图色并以实线画一个完整的圆。
用法:该函数调用方式为void circle(int x,int y,int radius);
说明: 参数x,y为圆心坐标,radius为圆半径,用像素个素表示。注意,调用circle()函数画圆时不用当前线型。
不同于ellipse()函数,只用单个半径radius参数调用circle()函数,故屏显纵横比可以自动调节,以产生正确的显示图。
此函数对应的头文件为graphics.h
返回值: 无
例: 画六个同心圆,圆心在(100,100)。
#include<graphics.h>
void main()
为了保证几何图形基本按预计情况显示在屏幕上,用屏显的纵横比来计算和纠正不同硬件及显示卡产生的畸变。计算纵横比所需要的水平方向和垂直方向的比例系数可调用函数getaspectratio()获得。
68. getaspectratio()获取纵横比函数
功能: 函数getaspectratio()返回x方向和y方向的比例系数,用这两个整型值可计算某一特定屏显的纵横比。
C语言图形编程函数大全
C语言图形编程函数大全图形编程必不可少一、字符屏幕一、屏幕操作函数1.clrcr()清除字符窗口函数2.window()字符窗口函数3.goto某y()光标定位函数4.clreol()清除光标行尾字符函数5.inline()插入空行函数6.delline()删除一行函数7.gette某t()拷进文字函数8.putte某t()拷出文字函数9.movete某t()移动文字函数二、字符属性函数10.te某tmode()文本模式函数11.highvideo()高亮度函数12.lowvideo()低亮度函数13.normvideo(void);14.te某tcolor()文本颜色函数15.te某tattr()文本属性函数16.te某tbackground()文本背景函数三、屏显状态函数17.where某()光标处某坐标函数18.wherey()光标处y坐标函数19.gette某tinfo()获取文本窗口信息函数在BorlandC++里面提供了字符屏幕和图形函数。
字符屏幕的核心是窗口(Window),它是屏幕的活动部分,字符输出或显示在活动窗口中进行。
窗口在缺省时,就是整个屏幕。
窗口可以根据需要指定其大小。
同样,对图形函数的操作,也提供了(Viewport)。
也就是说图形函数的操作都是在视口上进行。
图形视口与字符窗口具有相同的特性,用户可以在屏幕上定义大小不同的视口,若不定义视口大小,它就是整个屏幕。
窗口是在字符屏幕下的概念,只有字符才能在窗口中显示出来,这时用户可以访问的最小单位为一个字符。
视口是在图形屏幕状态下的概念,文本与图形都可以在视口上显示,用户可访问的最小单位是一个像素(像素这一术语最初用来指显示器上最小的、单独的发光点单元。
然而现在,其含义拓宽为指图形显示器上的最小可访问点)。
字符和图形状态下,屏幕上的位置都是由它们的行与列所决定的。
有一点须指出:字符状态左上角坐标为(1,1),但图形左上角坐标为(0,0)。
C语言图像处理函数大全
C语言图像处理函数大全,完整版∙∙1.图像平移图像平移只是改变图像在屏幕上的位置,图像本身并不发生变化。
假设原图像区域左上角坐标为(x0, y0),右下角坐标为(x1, y1),将图像分别沿x和y轴平移dx和dy,则新图像的左上角坐标为(x0 +dx, y0+dy),右下角坐标为(x1+dx, y1+dy)。
坐标平移变换公式为:x′ = x +dxy′ = y +dy在屏幕上实现图像的移动分为四个步骤:⑴保存原图像到缓冲区。
⑵擦除原图像。
⑶计算平移后的新坐标。
⑷在新的坐标位置重新显示原图像。
其中,擦除原图像的方法与图形变换中擦除原图形的方法一致,在实现中仍采用XOR异或方式画图擦除原图像。
对于新坐标值的计算还需要考虑边界情况,不要在图像平移后超出允许的屏幕范围。
此外,如果采用C函数getimage()和putimage()来保存和恢复图像,则图像的大小不能超过64K。
2.图像颠倒图像颠倒是指把定义好的图像区域上下翻转地显示在屏幕上。
分析图像颠倒的过程,可发现每行的图像信息都保持不变,而只是改变了行的顺序,将第一行与最后的第n行相互交换,第二行与第n-1行交换……,依此类推,从而实现了图像的颠倒。
只需采用按行交换的方式,即可方便地修改缓冲区内容,实现图像的颠倒。
基本步骤如下:(1) 用getimage()保存原图像,并擦除原图像。
(2) 计算图像的高度,即行数height;计算图像宽度width;计算保存一行图像信息height = bottom -top +1;width = right -left +1;linebytes = (width +7) /8 *4;(3)利用行交换缓冲区linebuf在图像内存缓冲区中进行信息交换,即把第一行与最末行交换,第2行与第n-1行交换……,依此类推,直至全部交换完毕。
(4)把交换后的图像缓冲区内容重新显示在屏幕上。
3.图像镜像变换镜像变换是指将指定区域的图像左右翻转地显示在屏幕。
