您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > C++Builder 6图形、图像及实例
※1※C++Builder图形、图像及实例内容提要:本文介绍了图形的绘制和图像处理,其中详细介绍了画布(Canvas)的属性与使用方法,利用它们,可以非常直观方便地绘制直线、曲线、矩形、椭圆等各种图形。本文还介绍了图像处理的方法,其中包括Image组件、TBitmap类和TJPEGImage类的使用,而要进行快速的图像处理,几乎都离不开ScanLine技术。使用ScanLine技术,能够快速取得bitmap的每行的颜色值,而无需使用Canvas的Pixels属性逐点获取像素点的颜色值。关键字:C++Builder、图形、图像、画布引言:自Windows诞生以来,可以通过GDI(GraphicsDeviceInterface)来实现图形的绘制。然而对于初学者来说,庞大复杂的GDI绘图系统是一个难以跨越的学习障碍。所幸的是,在C++Builder绘图系统中,提供了一个简易可行的画布(Canvas),可以用非常直观的方式来实现Windows下的绘图功能。C++Builder提供了Image组件,可以很方便地装载图像,以及进行图像处理。正文:1在窗体上作图1.1知识要点1.画布(Canvas)在C++Builder中,几乎所有的可视化组件(包括:Form、Image、Bitmap、PaintBox)都包含Canvas属性。Canvas包含了许多和绘图有关的性质,如Pen、Brush、Pixels、Font等,另外它还包含了各种绘图的函数,如LineTo、Rectangle、MoveTo、Polygon等。(1)Canvas类主要属性有:Font:画布绘制文本所用的字体。Brush:用于填充背景的画笔刷。Pen:用来画线和描述图形轮廓的画笔。PenPos:当前绘图位置的坐标。Pixels:画布像素数组。(2)Canvas类主要方法有:Arc:用当前画笔在画布上画圆弧。Chord:绘制由直线和椭圆相交而成的一个封闭形状。CopyRect:将图形的一部分从另一个画布复制过来。Ellipse:在给定的区域绘制椭圆。FillRect:用当前画刷填充指定的矩形。FloodFill:用当前画刷填充指定的区域。(3)LineTo类主要方法有:MoveTo:连同LineTo绘制直线。Polygon:绘出一系列的线,串起所传入的各个点,并从最后一点到第一点绘制一条线。Polyline:绘出一系列的线,串起所传入的各个点。Rectangle:绘制圆角矩形。StretchDraw:在画布上给定的大小绘制图像。TextOut:在画布上写出字符串。TextRect:在限定的区域写出字符串,区域之外的字符串不会被显示出来。2.颜色常数在C++Builder中提供了许多颜色的预定常数,这些预设颜色都以cl(cl代表color)为启始字※2※符命名。例如clRed代表红色,clBlue代表蓝色,clGreen代表绿色等等。另外C++Builder也将Windows的基本颜色以常数定义,如clWindow及clMenu分别代表Window及Menu(菜单)的颜色。下面列出部分C++Builder定义的颜色常数:clBlack:黑色。clGreen:绿色。clOlive:橄榄绿。clNavy:海蓝色。clPurple:紫色。clTeal:青紫色。clGray:灰色。clSilver:银色。clRed:红色。clLime:灰绿色。clBlue:蓝色。clAqua:淡绿青色。clWhite:白色。clBackground:Window背景色。clActiveCaption:活动视窗的标题色。clInactiveCaption:非活动视窗的标题色。clMenu:Menu的颜色。clWindow:Windows的背景色。clMenuText:Menu文字的颜色。clWindowText:Window内文字的颜色。clCaptionText:标题文字的颜色。clActiveBorder:活动视窗的边界颜色。clHighlight:高亮度Windows颜色。clHightlightText:被选取文字的颜色。clGrayText:灰色文字的颜色。clBtnText:Button内文字的颜色。以下的程序表示将画布中(3,5)这一像素点的颜色设为蓝色:Canvas-Pixels[3][5]=clBlue;另外,也可以利用以下的叙述来设定画笔的颜色为蓝色:Canvas-Pen-Color=RGB(0,0,255);3.RGB函数任何一种颜色都是由红、绿、蓝三种基本色构成的。RGB函数是Windows系统用以表示颜色的方式,它们用三个字节型参数变量,分别代表红色(Red)、绿色(Green)及蓝色(Blue)的强度值(0~255之间),组合起来表示颜色。例如RGB(255,0,0)代表红色(RGB(255,0,0)所代表的颜色和颜色常数clRed是相同的)。如果RGB函数中的三个参数相同,即红、绿、蓝的强度值一样,则其代表的颜色是黑白的。例如RGB(255,255,255)代表白色,RGB(0,0,0)代表黑色。4.Tcolor类Tcolor是表示颜色的类,其实例可以是clRed、clBlue、clGreen等刚才介绍到的颜色常数,例如:Tcolorcolor=clRed;也可以使用RGB函数来取值,例如:※3※Tcolorcolor=RGB(4,34,253);5.Pen和BrushTpen是在Canvas画线所使用的“笔”,因此所有和线条有关的绘图函数都会受Tpen影响,如LineTo、Ellipse、Polygon、PolyLine、Rectangle等函数都使用“笔”来画线,可以利用Canvas.Pen来存取Pen,并且可以修改Pen的性质,这些性质包含Color、Width、Style,以及Mode等。Style属性用来设置画笔样式:Pen-Style=psSolid,表示画笔是实心;=psDash表示破折线;=psDot表示点线;=psDashDot表示破折线+点线;=psClear表示透明线。Width属性用来设置画笔的宽度,Pen-Width=5表示画笔的宽度为5个像素。Color属性用来设定画笔的颜色。例如:Canvas-Pen-Color=clBlue;则表示将画笔的颜色设为蓝色。Tbrush可用来在Canvas的特定区域下着色。和Tpen不同的是,Tbrush可以用不同的颜色、样式及图案来填满Canvas的特定区域,而Tpen则是用来在Canvas上画线。Tbrush的Style属性有bsHorizontal、bsVertical、bsFDiagonal、bsBDiagonal、bsCross、bsDiagCross几种,分别代表实心、透明、水平线、垂直线、左上到右下的斜线,左下到右上的斜线、垂直交叉线、对角交叉线这几种填充方案。其中bsClear为默认值。Tbrush的Color属性设定与Pen的Color属性相一致。6.常用的绘图函数1)Canvas-MoveTo(intX,intY);函数用法:MoveTo是用以在使用LineTo之前设定画笔位置。使用此函数和直接设定Canvas的PenPos属性的效果相同。2)Canvas-LineTo(intX,intY);函数用法:LineTo函数用来从画笔位置画一条至(X,Y)点的直线,此直线不包含(X,Y)点,同时将画笔位置移至(X,Y)。所画的直线形状与Pen的属性一致。3)Canvas-Ellipse(intX1,intY1,intX2,intY2);函数用法:利用Ellipse可在Canvas上画出圆形或椭圆形。其环绕矩形的左上角坐标为(X1,Y1)而右下角坐标为(X2,Y2)。若该矩形为正方形,则所绘图形为圆形。当此椭圆形绘制时,使用Pen的值画出其外框,而使用Brush值填满其内部。4)Canvas-Rectangle(intX1,intY1,intX2,intY2);函数用法:在Canvas上画出一矩形。其矩形的左上角坐标为(X1,Y1),而右下角坐标为(X2,Y2),矩形内部的填充效果根据画刷的类型确定。5)Canvas-Refresh()函数用法:清除画布。1.2实例制作——用鼠标随意作图1.程序设计思路所谓在窗体上任意作图,就是要用鼠标在窗体上弹起弹落来确定所要画图形的起始位置,并设定好Pen和Brush的各种属性,可在窗体上绘制直线、矩形、椭圆等图形。2.程序实现步骤(1)打开C++Builder,生成一个新的应用程序,在工程中加入的组件如表1所示。※4※表1工程中加入的组件及其属性加入的组件属性属性值说明NameForm1FormCaption用鼠标随意作图ColorDialogNameColorDialog1NameButton1ButtonCaption终止绘图NameButton2ButtonCaption画直线NameButton3ButtonCaption画椭圆NameButton4ButtonCaption画矩形NameButton5ButtonCaption清屏NameGroupBox1GroupBoxCaption画笔设定下面的组件放置在GroupBox1上面NameEdit1EditText1NameRadioButton1RadioButtonCaptionpsSolidNameRadioButton2RadioButtonCaptionpsDashNameRadioButton3RadioButtonCaptionpsDotNameRadioButton4RadioButtonCaptionpsDashDotNameButton6ButtonCaption颜色设置NameGroupBox2GroupBoxCaption画刷设定下面的组件放置在GroupBox2上面NameRadioButton5RadioButtonCaptionbsSolidNameRadioButton6RadioButtonCaptionbsClearNameRadioButton7RadioButtonCaptionbsHorizontalNameRadioButton8RadioButtonCaptionbsVerticalNameButton7ButtonCaption颜色设置设置好的程序界面如图1所示。图1程序界面※5※(2)定义全局变量:intsort,ox,oy;//sort代表要绘制图形的类别,ox、oy表示鼠标按下去时的坐标位置(3)在生成窗体事件中初始化sort,编写代码如下:void__fastcallTForm1::FormCreate(TObject*Sender){sort=0;//表示不绘制图形}(4)设定画笔的宽度、颜色、形状。编写代码如下:void__fastcallTForm1::Button6Click(TObject*Sender){if(ColorDialog1-Execute()){TColorpencolor;Canvas-Pen-Color=ColorDialog1-Color;//设定画笔颜色}}void__fastcallTForm1::RadioButton1Click(TObject*Sender){Canvas-Pen-Style=psSolid;//设定画笔为实线}void__fastcallTForm1::RadioButton2Click(TObject*Sender){Canvas-Pen-Style=psDash;//设定画笔为破折线}void__fastcallTForm1::RadioButton3Click(TObject*Sender){Canvas-Pen-Style=psDot;//设定画笔为点线}void__fastcallTForm1::RadioButton4Click(TObject*Sender){Canvas-Pen-Style=psDashDot;/
本文标题:C++Builder 6图形、图像及实例
链接地址:https://www.777doc.com/doc-3391283 .html