《在epx下基本的图形绘制方法》由会员分享,可在线阅读,更多相关《在epx下基本的图形绘制方法(23页珍藏版)》请在金锄头文库上搜索。
1、EPX 下基本的图形绘制方法2015-07-02 主讲:【司令】 ePx wGm我现在来讲一下在 EPX 下基本的图形绘制方法首先,在 EPX 中绘制图形,使用到的基本类是 TCanvas,叫画布,在其它的语言中也是相同的叫法TCanvas 具有以下一些重要的属性和方法TCanvas 对象是一个用于绘图的组件,Delphi 利用这个组件为用户提供了一个绘制图形的区域,在这个区域上,程序可实现各种绘图功能,很多组件(如 TImage、TMemo )的 Canvas属性就是 TCanvas 对象。在组件上绘制图形就是在组件的画布上绘制。TCanvas 的Brush、Pen 、Font 属性分别是
2、TBrush、TPen、TFont 对象,它们用于定义绘制图形的风格。画布的笔的位置定义在 PenPos 属性中,可用 MoveTo 方法来移动笔。如果要在画布上输出文本,可用 Textout 方法。基本的属性与方法掌握后,我们先要知道哪些控件具有画布属性,也就是说我们可以用哪些控件来绘图呢?在 EPX 中,用来绘图最好的对象就是 TImage 控件当然 TForm 等也有 Canvas 属性,也可以用来绘图好的,知道了 TImage 对象有 Canvas 属性了,是不是可以直接使用了呢?回答是 “否” 。因为 TImage 并不直接具有 Canvas 属性,不能直接绘制图形在 Image 上
3、绘制图形,需要借助 TBitmap 来实现也就是要借助 TImage 的 Picture.Graphic 属性来实现下面我们来以代码示例说明一下如何在 TImage 控件上绘制一条直线var Canvas: TCanvas;/首先创建 Graphic 对象Image1.Picture.Graphic := TBitmap.Create;/然后取出 CanvasCanvas := TBitmap(Image1.Picture.Graphic).Canvas;/接下来就可以直接绘图了Canvas.MoveTo(50,50); /将画笔移动到坐标为 50,50 的这一点Canvas.LineTo(3
4、00,100); /画笔落下开始画线,直到到坐标 300,100 处停止我来试一下上面的代码,看看效果是什么样的,大家也可以试一下【军长】伟伟(695131235) 10:06:58 不会Image1.Picture.Graphic := TBitmap.Create;Image1.Picture.Graphic.Width := Image1.Width;Image1.Picture.Graphic.Height := Image1.Height;需要在创建 Bitmap 后,设置一下位图的大小不过遗憾的是在 Panel 中,EPX 暂时未开放 Canvas 属性不能直接画图,当然是有办法的
5、,现在就不讲了,避免大家搞混淆,慢慢地到后面大家都学会了,就方便讲了通过以上代码,我能够画出这条直线,大家也可以画出这条直线接下来再来绘制一个圆和上图对比一下,可以发现文字已经没有再遮盖直线了EPX 中 Canvas 绘图函数有几处与 DELPHI 不一样的地方例如,绘制一个矩形,在 DELPHI 中有两种参数传递方法:而 EPX 中则只允许使用第一种AddMethod(procedure Draw(X, Y: Integer; Graphic: TGraphic), CallMethod);AddMethod(procedure Ellipse(X1, Y1, X2, Y2: Integer
6、), CallMethod);AddMethod(procedure LineTo(X, Y: Integer), CallMethod);AddMethod(procedure MoveTo(X, Y: Integer), CallMethod);AddMethod(procedure Rectangle(X1, Y1, X2, Y2: Integer), CallMethod);AddMethod(procedure RoundRect(X1, Y1, X2, Y2, X3, Y3: Integer), CallMethod);AddMethod(procedure StretchDraw
7、(X1, Y1, X2, Y2: Integer; Graphic: TGraphic), CallMethod);AddMethod(function TextHeight(const Text: string): Integer, CallMethod);AddMethod(procedure TextOut(X, Y: Integer; const Text: string), CallMethod);AddMethod(function TextWidth(const Text: string): Integer, CallMethod);AddMethod(procedure Dra
8、wFocusRect(X1, Y1, X2, Y2: Integer), CallMethod);AddMethod(procedure CopyRect(X1, Y1, X2, Y2: Integer; Canvas : TCanvas; X3, Y3, X4, Y5: Integer), CallMethod);AddMethod(procedure Chord(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer), CallMethod);AddMethod(procedure Arc(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integ
9、er), CallMethod);AddMethod(procedure FillRect(X1, Y1, X2, Y2: Integer), CallMethod);AddMethod(procedure FloodFill(X, Y: Integer; Color: TColor; FillStyle: TFillStyle), CallMethod);AddMethod(procedure FrameRect(X1, Y1, X2, Y2: Integer), CallMethod);AddMethod(procedure Lock, CallMethod);AddMethod(proc
10、edure Refresh, CallMethod); AddMethod(procedure Pie(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer), CallMethod);AddMethod(procedure TextRect(X1, Y1, X2, Y2: Integer; X,Y : Integer; Text : string), CallMethod);AddMethod(function TryLock: Boolean, CallMethod);AddMethod(procedure Unlock, CallMethod);AddPrope
11、rty(Handle, Integer, GetProp, SetProp);AddProperty(CopyMode, Integer, GetProp, SetProp);AddProperty(Font, TFont, GetProp, SetProp);AddProperty(Pen, TPen, GetProp, SetProp);以上是在 EPX 中提供的关于 TCanvas 的属性与方法其参数要严格按照以上说明进行输入,不可以直接完全使用 DELPHI 的经验来执行现在就再来讲解一下如何来绘制一条空心的线条其实绘制空心线条很容易,就是绘制两条线就可以,第一条比较粗,第二条比较细,
12、从同一起点到终止我来先尝试一下第二条细线的颜色调整为背景颜色/绘制粗线Canvas.MoveTo(50,50);Canvas.Pen.Color := clRed;Canvas.Pen.Width := 5;Canvas.LineTo(300,100);/绘制细线Canvas.MoveTo(50,50);Canvas.Pen.Color := clWhite;Canvas.Pen.Width := 3;Canvas.LineTo(300,100);当然圆也可以做相同处理文字要做空心就没有那么容易了老師, 如果按這種思路繪製的話, 會有這樣一個問題: 如果背景是圖片的話, 空心線的空心處不是透明
13、的, 而是其它顏色.那处理也很简单,看来你一直在看我讲解的内容,是吧我现在讲的是一些最基本的内容,如果是处理图片,其实绘制空心线条也是有办法的那肯定要了解一下嘛. 目前還沒有辦法用 EPX 軟件去試, 但看看老師的講解還是有用的处理方法是从图片上使用 Pixels 将图片中的颜色设置到空心处即可,需要增加一个过程我處理透明的方法時, 取背景圖的坐標點為空心處的座標先同样的使用以上方法在图片上绘制空心线条然后将空心线中,白色的部分,使用图片相对应的位置的颜色置换即可看来是一样的再说一下文字的空心处理方法文字由于不受画笔大小控制,因此空心起来是相对比较困难的我们可以多绘制几次文字来解决这个问题在一
14、个文字的八个方向全部绘制一次相同颜色的文字,然后再在中心使用背景色绘制一次文字,就出现了空心文字,我放上代码Canvas.Font.Color := clGreen;Canvas.TextOut(199,99,Hello,EPX 绘图.);Canvas.TextOut(201,100,Hello,EPX 绘图.);Canvas.TextOut(199,99,Hello,EPX 绘图.);Canvas.TextOut(200,99,Hello,EPX 绘图.);Canvas.TextOut(201,99,Hello,EPX 绘图.);Canvas.TextOut(199,101,Hello,EP
15、X 绘图.);Canvas.TextOut(200,101,Hello,EPX 绘图.);Canvas.TextOut(201,101,Hello,EPX 绘图.);Canvas.Font.Color := clWhite;Canvas.TextOut(200,100,Hello,EPX 绘图.);现在讲最后一点,就是绘制图片到图形中如果需要绘制图片或照片到图形中,有两个函数一个是 Draw一个是 StretchDraw这两个函数不同之处在于是否拉伸图片大小我们现在来绘制如下图片到指定位置其實在 Delphi 裡做空心字體還是比較簡單的当然我们绘制上去是不会动的当然如果使用 AAFONT 做空
16、心字体更简单我现在在讲的是关于 TCanvas 的基本用法那倒是如果已经掌握了基础的,我可以出比较有难度的题目来做现在群里有大量的基本语法没有过关的老師, 什麼時候給實習一下 GDI+這類的學習方法实习?老師這個是 TCanvas 畫的?補習GDI+不也很简单吗?我们先普及基础好了,上面的方法是一些基本的方法,现在我再讲一下如何绘制过渡色有精力的可以跟着看,没有精力的,可以以后慢慢学说着说着就被打乱了还没有说绘制图片呢我先写这句代码了再说var Pic: TPicture;Pic:= TPicture.Create;Pic.LoadFromFile(VarToStr(CommandLine.WorkRoot) + TankChartGX.gif);Canvas.Draw(50,2