⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 专业tc--图形篇4.htm

📁 图形学的一些基础知识
💻 HTM
📖 第 1 页 / 共 3 页
字号:
&amp;stBitmap);&nbsp;<BR>return CSize (stBitmap.bmWidth, stBitmap. 
bmHeight);&nbsp;<BR>}&nbsp;<BR>//Create a pen with the same color as a brush. 
BOOL CreatePenFromBrush (Cpen&amp;pen, cost 
Cbrush&amp;brush)&nbsp;<BR>{kk1}&nbsp;<BR>LOGBRUSH 
stBrush;&nbsp;<BR>brush.Getobject (sizeof (LOGBRUSH), 
&amp;stBrush);&nbsp;<BR>return pen. Createpen (PS_SOLID, 0, 
stBrush.ibColor);&nbsp;<BR>}&nbsp;<BR>四、实现一个橡皮区矩形&nbsp;<BR>CRectTracker是一个很有用的类,可以通过调用CRectTracker::TrackRubberBand&nbsp;<BR>响应WM_LBUTTONDOWN消息来创建一个橡皮区矩形。下例表明使用CRectTracker移动和重置视窗中的蓝色椭圆的大小是很容易的事情。&nbsp;<BR>首先,在文件档中声明一个CRectTracker数据成员: 
class CSampleView : Public CView&nbsp;<BR>{ kk1}<BR>…&nbsp;<BR>public 
:&nbsp;<BR>CrectTracker 
m_tracker;&nbsp;<BR>…&nbsp;<BR>};&nbsp;<BR>其次,在文档类构造函数中初始化CRectTracker对象: 
CSampleDoc:: CSampleDOC ()&nbsp;<BR>{ kk1}<BR>//Initialize tracker position, 
size and style. m_tracker.m_rect.SetRect (0, 0, 10, 
10);&nbsp;<BR>m_tracker.m_nStyle=CRectTracker:: resizeInside | CRectTracker:: 
dottedLine;&nbsp;<BR>}&nbsp;<BR>然后,在OnDraw函数中画椭圆和踪迹矩形:&nbsp;<BR>void 
CSampleView:: OnDraw (CDC* pDC)&nbsp;<BR>{ kk1}<BR>CSampleDoc* pDoc=GetDocument 
();&nbsp;<BR>ASSERT_VALID (pDoc);&nbsp;<BR>//Select blue brush into device 
context. CBrush brush (RGB (0, 0, 255));&nbsp;<BR>CBrush* 
pOldBrush=pDC-&gt;SelectObject (&amp;brush);&nbsp;<BR>//draw ellipse in tracking 
rectangle.&nbsp;<BR>Crect rcEllipse;&nbsp;<BR>pDoc-&gt;m_tracker.GetTrueRect 
(rcEllipse);&nbsp;<BR>pDC-&gt;Ellipse (rcEllipse);&nbsp;<BR>//Draw tracking 
rectangle.&nbsp;<BR>pDoc-&gt;m_tracker.Draw (pDC);&nbsp;<BR>//Select blue brush 
out of device context.&nbsp;<BR>pDC-&gt;Selectobject 
(pOldBrush);&nbsp;<BR>}&nbsp;<BR>最后,使用ClassWizard处理WM_LBUTTONDOWN消息,并增加下述代码。该段代码根据鼠标击键情况可以拖放、移动或者重置椭圆的大小。&nbsp;<BR>void 
CSampleView::OnLButtonDown (UINT nFlags, CPoint point)&nbsp;<BR>{ kk1}<BR>//Get 
pointer to document.&nbsp;<BR>CSampleDoc* pDoc=GetDocument 
();&nbsp;<BR>ASSERT_VALID (pDoc);&nbsp;<BR>//If clicked on ellipse, drag or 
resize it. Otherwise create a rectangle<BR>//rubber-band rectangle nd create a 
new ellipse. BOOL bResult=pDoc-&gt;m_tracker.HitTest 
(point)!=&nbsp;<BR>CRectTracker::hitNothing;&nbsp;<BR>//Tracker rectangle 
changed so update views.&nbsp;<BR>if (bResult)&nbsp;<BR>{ 
kk1}<BR>pDoc-&gt;m_tracker.Track (this,point,TRue);<BR>pDoc-&gt;SetModifiedFlag 
();&nbsp;<BR>pDoc-&gt;UpdateAllViews (NULL);&nbsp;<BR>}&nbsp;<BR>else 
pDoc-&gt;m-tracker.TrackRubberBand (this,point,TRUE);&nbsp;<BR>CView:: 
onLButtonDown 
(nFlags,point);&nbsp;<BR>}&nbsp;<BR><BR>在Delphi中,专门定义了一组对象和部件用以绘制图形,完成一些简单的图像功能。利用这些对象、部件的方法,可以方便地绘制各种常用图形;通过设置它们的属性,能得到不同风格的图形。另外,通过对鼠标事件的定义,可以方便的设计图形绘制程序。<BR>TCanvas 
Object(画布对象)<BR>TCanvas对象是一个用于绘图的表面,在这个区域上,程序可实现各种绘图功能,很多部件(如TIMage,TMemo)的Canvas属性就是TCanvas对象。在部件上绘制图形就是在部件的画布上绘制。TCanvas的Brush,Pen,Font属性分别是TBrush,TPen,TFont对象,它们用于定义绘制图形的风格。<BR>画布的笔的位置定义在PenPos属性中,可用MoveTo方法来移动笔。如果要在画布上输出文本,可用Textout方法。<BR>Tpen 
Object(画笔对象)<BR>应用程序常用TPen对象在画布上绘制各种线段,笔的颜色在Color属性中定义。线段宽度在Width属性中定义。Style属性定义了线段的各种类型,这些类型的定义与Visual 
C++中的定义类似。<BR> Mode属性定义线段的颜色。可结合当前的颜色、屏幕在Delphi中,专门定义了一组对象和部件用以绘制图形,完成一些简单的图像功能。利用这些对象、部件的方法,可以方便地绘制各种常用图形;通过设置它们的属性,能得到不同风格的图形。另外,通过对鼠标事件的定义,可以方便的设计图形绘制程序。<BR>TCanvas 
Object(画布对象)<BR>TCanvas对象是一个用于绘图的表面,在这个区域上,程序可实现各种绘图功能,很多部件(如TIMage,TMemo)的Canvas属性就是TCanvas对象。在部件上绘制图形就是在部件的画布上绘制。TCanvas的Brush,Pen,Font属性分别是TBrush,TPen,TFont对象,它们用于定义绘制图形的风格。<BR>画布的笔的位置定义在PenPos属性中,可用MoveTo方法来移动笔。如果要在画布上输出文本,可用Textout方法。<BR>Tpen 
Object(画笔对象)<BR>应用程序常用TPen对象在画布上绘制各种线段,笔的颜色在Color属性中定义。线段宽度在Width属性中定义。Style属性定义了线段的各种类型,这些类型的定义与Visual 
C++中的定义类似。<BR> Mode属性定义线段的颜色。可结合当前的颜色、屏幕TColor类型<BR>TColor类型用于定义一个对象颜色。很多部件的颜色属性就是TColor 
类型, 在Graphics单元中TColor定义如下:<BR>  TColor = -(COLOR_ENDCOLORS + 
1)..$02FFFFF;<BR>这是一个32位二进制数据。Graphic单元中还定义了一些常用的颜色常量,这些常量或直接映射成系统调色板中最相近的颜色,或映射成Wondows 
控制面板中颜色部分的系统视频颜色。<BR>直接映射成系统调色板中的颜色有:<BR>ClAqua,CLBlack,ClBlue,ClbkGrray,ClFuchsoa...ClYellow<BR>映射程序用4字节的二进制码来定义颜色,低3 
位字节代表RGB 
相应的颜色,如$00FF0000表示纯蓝,$0000FF00表示纯绿,$000000FF表示纯红,$00000000表示黑色,$00FFFFFF表示白色。如果最高位字节是$00,则表示用系统调色板中最相近的颜色;最高位字节是$01,则表示用当前调色板中最相近的颜色匹配;最高位字节是$02,则用当前设备描述表中逻辑调色板的次相近颜色匹配。<BR>用Windows 
API的SelectPalette函数可创建逻辑调色板,要实现逻辑调色板到硬件调色板的映射,需用函数RealizePalett。<BR>图像对象概述<BR>TGraphic对象<BR>TGraphic对象是TBitmap 
,TIcon,Tmetafile对象的基类。如果知道图像的具体类型( 如位图, 图标元文件) , 则应将图像贮存在相应类型的对象中( 
如TBitmap,TIcon,Tmetafile),否则应该使用可贮存任何图像类型的TPicture对象。<BR>TPicture对象<BR>TPicture对象可以保存位图、图标或元文件。Graphic属性中包括图像的类型;图像的高度和宽度分别定义在Height,Width属性中;调用LoadFromFile方法,可以从文件中装载一幅图像:<BR>procedure 
TForm1.FormCreate(Sender: 
TObject);<BR>begin<BR>BitBtn1.Glyph.LoadFromFile('TARTAN.BMP');<BR>end;<BR>要保存一个位图,则要用SaveToFile方法;要把图像复制到剪切板,可以调用TClipboard对象的Assign方法。<BR>TImage部件<BR>TImage部件用以在窗体中显示图像,它的Picture 
属性保存着要显示的图像, 这是一个TPicture对象。AutoSize,Stretch属性是用来调节部件与图像的大小的。当AutoSize 
为真值时,TImage部件将根据它所包含的图像的大小来调整自身的大小;当AutoSize为假值时,不论图像有多大,部件将保持设计时的大小。如果部件比图像小, 
那么只有一部分图像是可见的。当Stretch为真值时,位图像将根据部件的大小调整自身的大小,当部件大小改变时,元文件也做相应变化。Stretch属性对图标没有作用。<BR>TBitmap 
Object(位图对象)<BR>位图对象包含一个位图图像,有HBITMAP,HPALETE句柄,可自动管理调色板。位图对象也有画布属性。位图的Palette属性用来控制位图的颜色映射,它包括256种可显示的颜色。 
如果应用程序用前景色绘制位图,Palette 
属性的颜色将被加入Windows系统调色板,其它颜色被映射到系统调色板已存在的颜色。如果应用程序用自己的颜色绘制位图,而其它程序已占有系统调色板,位图的颜色将被映射到系统调色板中。<BR>如果Monochrome属性设置成假,位图将显示成彩色,反之显示成黑白色。<BR>调用Draw和StretchDraw方法可在画布上绘制位图。<BR><BR>这里是一个用Canvas对象实现的小画图程序,这里看到的是程序运行的一个瞬间,源程序在例程中——Canvas文件夹中,读者可以自行参照开发应用程序。<BR><BR>在介绍用编程的方法来生成位图图形和进行图像处理前,我们先来看一下如何用Windows图形工具来生成和编辑位图文件。<BR>在Windows程序生成工具软件Visual 
C++中,提供了生成、编辑位图图片和图标的位图编辑器。通过位图编辑器,你可以很方便的画出一张图片加入所编译的应用程序中;或是给你的程序设计一个美观的图标。你还可以将你喜欢的位图图片和图标引入到你的程序中。<BR>你可以在程序源码中资源栏中直接新建或引入图片、图标。在已编译过的程序中你也可以用“插入”菜单中的“插入资源”选项,来完成上述这些处理操作。<BR>使用位图编辑器,你可以很方便的生成和编辑图片和图标,但位图编辑器只能用于简单的图形处理,在下一章里我们还将为您介绍如何用程序来实现。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</P>  
<DIV align=center><FONT color=#00ff00><A 
href="http://tc2001.myrice.com/index.htm"><FONT 
size=5><B>回首页</B></FONT></A></FONT>  <B><A 
href="http://tc2001.myrice.com/base5.htm#"><FONT color=#ff0000 
size=5>TOP</FONT></A></B>  <A href="http://tc2001.myrice.com/base1.htm"><FONT 
size=5>上一页</FONT></A> <A href="http://tc2001.myrice.com/base3.htm"><FONT 
color=#00ff00 size=5>下一页</FONT></A> </DIV></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -