Ⅰ c语言图形函数及应用 C语言输出图形
摘 要:图形函数是C语言函数库中的重要组成部分,利用图形函数可以绘制出非常精美的图形,该文介绍了常用C语言图形函数并通过一个具体的实例介绍了如何利用图形函数设计出完美、漂亮的图形。
关键词:C语言 图形函数 应用
引言
C语言是国际上广泛流行的很有发展前途的计算机高级语言。它既具有一般计算机高级语言的可读性改睁、可移植性的特点,又具有低级语言能够改皮对计算机硬件进行操作的特性,因此,它适合用于操作系统的描述语言,用C语言开发系统软件和应用软件。但在87ANSIC中并没有规定C语言的图形功能,许多C语言教材没有介绍C语言的图形功能,这给许多需要用C语言设计完美、漂亮的用户界面的初学者带来了困难[1-2]。本文旨在通过介绍Turbo C 2.0的主要图形函数及一个具体的实例简介这些函数的用法。
1 与图形绘制有关的系统硬件[2-3]
要使计算机能够绘制图形,必须有一定的硬件基础作为保障。图形绘制的硬件基础主要是显示器和显示卡。显示器的工作方式一般有文本方式和图形方式。要在屏幕上显示图形,必须将其设置成图形方式。衡量显示器的主核歼岁要性能指标是点距和分辨率。目前显示器常用的点距有0.39mm、0.31mm和0.28mm三种。高档微机配置的彩色显示器目前流行的是VGA档次,它最低的分辨率为640×480,中档的是800×600,高档的是1024×768。显示器必须与显示卡配套使用才能发挥其图形功能。显示卡所能支持的不同分辨率的显卡类型称为显示模式。下表给出Turbo C中常用的几种显示卡的图形模式:
2 Turbo C 2.0中与绘图有关的常用图形函数
2.1 设置图形工作方式的函数:initgraph()。
Turbo C绘图,首先必须设置显示器为图形方式。该函数通过选定参数可确定显卡的类型及图形模式。
如:
int driver,mode;
driver=IBM8514;
mode=IBM8514HI;
initgraph(&driver,& mode,“c:\temp”);
将图形方式设置为IBM8514类型,IBM8514HI图形模式,1024×768的分辨率,搜索路径temp为C盘一级子目录。
2.2 颜色控制函数setbkcolor(int color)及setcolor(int color)。
其中setbkcolor( )设置背景颜色,setcolor( )设置划线颜色。
2.3 基本绘图函数
A. line(int x1,int y1,int x2,int y2)
功能:从点(x1,y1)到点(x2,y2)画一直线。
B. arc(int x,int y,int stange,int endangle,int r)
功能:以(x,y)为圆弧的中心,以stange为起始角度,以endangle为终止角度,以r为半径作一圆弧。
C. setfillstyle(int pattern,int color)
功能:用参数pattern所确定的填充模式,用参数color确定的颜色进行填充。
D. floodfill(int x,int y,int color)
功能:填充一个含有点(x,y)在内的有界封闭区域,这个有界封闭区域的边界由参数color确定,填充模式与填充颜色由函数setfillstyle设定。
2.4 字符输出函数
A. settextstyle(int font,int direction,int size)
功能:在图形方式下设置字符的字体,式样和放大因子。
B. outtextxy(int x,int y,char &str)
功能:在窗口(x,y)的位置输出字符或字符串。
C. getch( )
功能:从控制台取得一字符且不输出,用来使程序暂停,按任意键后使程序继续运行。
3. 绘制一个圆饼型统计图的程序如下
#include
main( )
{ int driver,mode;
driver=VGA;
mode=VGAHI;
initgraph(&driver,&mode,“ ”);
setbkcolor(0);
setcolor(15);
arc(320,240,0,360,180);
line(320,240,500,240);
line(320,240,443,112);
line(320,240,266,70);
line(320,240,200,374);
setfillstyle(4,2);
floodfill(340,230,15);
setfillstyle(5,9);
floodfill(340,180,15);
setfillstyle(7,4);
floodfill(300,240,15);
setfillstyle(8,3);
floodfill(340,280,15);
setcolor(14);
settextstyle(1,0,4);
outtextxy(410,180,“14%”);
settextstyle(1,0,4);
outtextxy(330,110,“16%”);
settextstyle(1,0,4);
outtextxy(200,200,“34%”);
settextstyle(1,0,4);
outtextxy(340,310,“36%”);}
上述程序在Turbo C 2.0中上机通过编译、连接、运行,可得到精美的圆饼型图。读者通过阅读并上机调试运行该程序可以对C语言的图形设置、绘制;颜色的控制、填充等函数的应用有一个感性的认识,对复杂枯燥的C函数提高学习兴趣。
结语
目前许多C语言教材很少介绍C语言的图形功能,而许多C语言学习者对C语言的图形功能很感兴趣,为帮助初学者学习C语言绘图函数并提高学习兴趣,本文简单介绍了C语言一些常用的绘图函数及其应用,权当抛砖引玉!还有一些图形函数没有列出,读者若有兴趣可参阅《C语言函数大全》。
参考文献:
[1]徐士良.PC机C图形编程手册.北京:清华大学出版社,1994.2.
[2]谭浩强.C程序设计(第二版)[M].北京:清华大学出版社,1999.
[3]MarkFinlay.C和C++图形程序设计基础.北京:龙门书局,1997.4.
[4]Herbert Schildt着.戴健鹏译.C语言大全(第二版)[M].北京:电子工业出版社,1994.
Ⅱ c语言如何给自己写的程序加上图形界面
标题、背景和前景颜色、窗口大小等等这些可以用API函数实现
#include<windows.h>//加入头文件就可调用API函数
intmain()
{
HWNDhWnd=GetForegroundWindow();
HANDLEhandle=GetStdHandle(STD_OUTPUT_HANDLE);
SetWindowText(hWnd,"测试");//标题
SetConsoleTextAttribute(handle,FOREGROUND_GREEN|BACKGROUND_BLUE);//前景、背景颜色
return0;
}
VC6.0 能够在 XP 下很好的运行,无需进行额外的设置,但在 Win7、Win8 和 Win10 下,安装完成后还要修改兼容模式才可以。解决方法如下:
一、对于Win7和Win10,需要将VC6.0的兼容模式修改为WindowsXP SP3:
1、在 VC6.0 的快捷方式或开始菜单上单击鼠标右键,选择“属性”。
Ⅲ C语言怎样显示一张图片
1、如果有图片(例如 wzzx.jpg) 程序中插一句:
system("mspaint wzzx.jpg"); 就可以 在运行时显示这张图片。
用字符串变量调用也可以:
char pic_name[80]="wzzx.jpg";
char cmd[100];
sprintf(cmd,"mspaint %s",pic_name);
system(cmd); // 显示图片
2、system函数:
原型:int system(const char * command);
功能:执行 dos(windows系统) 或 shell(Linux/Unix系统) 命令,参数字符串command为命令名;
说明:在windows系统中,system函数直接在控制台调用一个command命令。在Linux/Unix系统中,system函数会调用fork函数产生子进程,由子进程来执行command命令,命令执行完后随即返回原调用的进程;
头文件:stdlib.h;
返回值:命令执行成功返回0,执行失败返回-1。
Ⅳ C语言中如何显示图片
1、图片也是属于文件类型的一种,图片属于二进制文件。使用fopen函数的二进制模式“rb”就可以打开。
2、例程:
#include<stdlib.h>
#include<stdio.h>
intmain()
{
FILE*fpPhoto,*fpText,*fpTarget;
intiRead;
charszBuf[100];
printf("请输入第一个文件名(bmp): ");
gets(szBuf);
fpPhoto=fopen(szBuf,"rb");
printf("请输入第二个文件名(txt): ");
gets(szBuf);
fpText=fopen(szBuf,"rb");
printf("请输入目的文件名(bmp): ");
gets(szBuf);
fpTarget=fopen(szBuf,"wb");
if(!fpPhoto||!fpText||!fpTarget)
{
printf("打开文件失败! ");
system("pause");
return-1;
}
while((iRead=fread(szBuf,1,sizeof(szBuf),fpPhoto))>0)
fwrite(szBuf,1,iRead,fpTarget);
while((iRead=fread(szBuf,1,sizeof(szBuf),fpText))>0)
fwrite(szBuf,1,iRead,fpTarget);
fclose(fpPhoto);
fclose(fpText);
fclose(fpTarget);
return0;
}
Ⅳ 用c语言编写程序在屏幕显示图形
最简单姿氏枝的方法,不像其他人那么麻烦迹敏核李的
#include<stdio.h>
voidmain()
{
printf("* *** ***** *** *");
}
Ⅵ 怎样用C语言显示一张jpg的图片呢
可以用函数OleLoadPicture从包含有图像数据的流中装载图像。
具体实现代码如下:
//在显示图像之前,首先要获取到图像文件的存放路径,这里采用标准的文件打开对话框来选取图像文件,文件名存放在CString型的变量m_sPath中:
CFileDialogdlg(TRUE,"jpg","*.jpg",
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"JPEG文件(*.jpg)|*.jpg|GIF文件(*.gif)|*.gif||",NULL);
if(dlg.DoModal()==IDOK)
{
m_sPath=dlg.GetPathName();
Invalidate();
}
//为简单计,图形显示的代码直接在视类中的OnDraw中编写,首先打开文件并判断文件的可用性,并把文件内容放到流接口IStream的对象pStm中:
IStream*pStm;
CFileStatusfstatus;
CFilefile;
LONGcb;
……
if(file.Open(m_Path,CFile::modeRead)&&file.GetStatus(m_Path,fstatus)&&((cb=fstatus.m_size)!=-1))
{
HGLOBALhGlobal=GlobalAlloc(GMEM_MOVEABLE,cb);
LPVOIDpvData=NULL;
if(hGlobal!=NULL)
{
if((pvData=GlobalLock(hGlobal))!=NULL)
{
file.ReadHuge(pvData,cb);
GlobalUnlock(hGlobal);
CreateStreamOnHGlobal(hGlobal,TRUE,&pStm);
}
}
}
//然后,就直接调用OleLoadPicture函数从流中装载图像:
IPicture*pPic;
……
OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic));
//由于该函数有时会导致失败,所以应当用SUCCEEDED宏来做一些适当的保护工作,只有在数据装载成功的前提下才能继续下面的图像显示工作:
if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic)))
{
OLE_XSIZE_HIMETRIChmWidth;
OLE_YSIZE_HIMETRIChmHeight;
pPic->get_Width(&hmWidth);
pPic->get_Height(&hmHeight);
doublefX,fY;
……
fX=(double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC->GetDeviceCaps(HORZSIZE)*100.0);
fY=(double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->GetDeviceCaps(VERTSIZE)*100.0);
if(FAILED(pPic->Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL)))
AfxMessageBox("渲染图像失败!");
pPic->Release();
}
else
AfxMessageBox("从流中装载图像失败!");//其中,显示工作主要是由IPicture接口对象的Render函数来完成的,该函数主要用来将图片的指定部分画到指定的设备环境的指定位置。
原型如下:
HRESULTRender(HDChdc,//渲染图像用的设备环境句柄
longx,//在hdc上的水平坐标
longy,//在hdc上的垂直坐标
longcx,//图像宽度
longcy,//图像高度
OLE_XPOS_HIMETRICxSrc,//在源图像上的水平偏移
OLE_YPOS_HIMETRICySrc,//在源图像上的垂直偏移
OLE_XSIZE_HIMETRICcxSrc,//在源图像上水平拷贝的数量
OLE_YSIZE_HIMETRICcySrc,//在源图像上垂直拷贝的数量
LPCRECTprcWBounds//指向目标图元设备环境句柄的指针);
Ⅶ C语言中怎么编程在计算机屏幕上显示如下图案
如果实在普通LCD屏上显示某个图案,需要先将待显示的图案用专用软件处理成图像数据,然后封装到一个数组里,然后编写一个子函数将这些数据按顺序写到LCD缓冲区中即可。
如果是在PC机的显示器上显示该图案,需要首先根据该图片的格式(如jpeg,或BMP,或其它格式),进行分析,去除图片格式头,然后将图片文件中的图像数据(即像素点)提取出来,然后写入显示器的缓存中即可。
Ⅷ 如何用C语言设计一个程序模拟有图形界面的计算器
首先,打开Vs 2010,如图