投资基金一本通:VB.Net GDI+编程知识提

来源:百度文库 编辑:中财网 时间:2024/05/04 16:31:29
VB.Net GDI+编程知识提要2010-04-17 21:23

本文章内容框架取自http://blog.csdn.net/david_shar/archive/2008/09/03/2873472.aspx,并将C#代码全部改写为VB.net代码,同时增加适当注解。

本节主要内容:

.NET图形编程概述
画笔和画刷
图形的绘制
文本和字体
双缓冲


一、.NET图形编程概述


GDI+技术简介
GDI:Graphics Device Interface.
GDI+是一种构成Microsoft Windows XP 操作系统的子系统的应用程序编程接口(API)。GDI+ 负责在屏幕和打印机上显示信息。它是GDI的改进,同时也是.NET框架结构的重要组成部分。和GDI一样它提供料对二维图形图像和文字排版处理的支持.通过GDI+能够创建与设备无关的应用程序。


GDI+提供的新特性:
Alpha混合技术、反锯齿处理技术、渐变色和纹理填充、宽线条、基本几何曲线样式、可缩放区域、浮点数坐标、嵌入画笔、高质量过滤和缩放、多种线条样式和端点选项

坐标系统:
GDI+在坐标系中绘制直线、矩形和其他形状。我们可以从各种各样的坐标系统中选择,但默认坐标系统的原点是在左上角,并且x 轴指向右边,y 轴指向下边。默认坐标系统的度量单位是像素。

System.Drawing中常用的结构


1.Color


Color封装了对颜色的定义。该结构中封装了 数百个分别对应与标准调色板色彩的静态成员。如Color.Red代表红色,Color.Purple代表紫色
有用的静态方法:
FromArgb:通过三原色构建Color对象
FromKnownColor:通过已知颜色构建Color对象
FromName:通过颜色名称来构建Color对象
例如:
Dim temp1 As Color = Color.Black
Dim temp2 As Color = Color.FromArgb(0,0,0)
Dim temp3 As Color = Color.FromName(“Black”)

2.Size和SizeF


表示绘制平面上的一个尺寸,一个为整数,一个为浮点数
构造函数
Dim sz1 As Size = new Size(10,10)
属性:
Width:表示宽度值
Height:表示高度值
重载了加、减、比较、赋值操作

3.Point和PointF


表示绘制平面上点的坐标,一个为整数,另外一个为浮点数
构造方法:
Dim pt As New Point(100, 200)
重载了加、减、比较、赋值操作

4.Rectangle和RectangleF


表示绘制平面上的一个矩形区域
属性
Bottom:矩形底部的纵座标
Top:矩形顶部的纵座标
Left:矩形坐部的横座标
Right:矩形右部的横座标
Height:矩形的高度
Width:矩形的宽度
Size:矩形的尺寸
IsEmpty:矩形是否为空(高度和宽度是否都是0)
X:矩形左上角的横座标
Y:矩形左上角的纵座标

Graphics类


使用GDI+绘图,首先要创建Graphics类

1.定义Graphics

Dim g As Graphics

注意访问级别

2.Graphics对象绘图方法


DrawArc—绘制圆弧、DrawBezier—绘制贝塞尔曲线、DrawBeziers—绘制贝塞尔曲线组、DrawClosedCurve—绘制封闭曲线、DrawCurve—绘制曲线、DrawEllipse—绘制椭圆、DrawIcon—绘制图标、DrawIconUnstretched—无缩放绘制图标、DrawImage—绘制图像、DrawImageUnscaled—无缩放绘制图像、DrawLine—绘制直线、DrawLines—绘制直线组、DrawPath—绘制GraphicsPath对象、DrawPie—绘制圆饼、DrawPolygon—绘制多边形、DrawRectangle—绘制矩形、DrawRectangles—绘制矩形组、DrawString—绘制文本

3.Graphics对象绘制实心图形方法


FillClosedCurve—绘制实心封闭曲线、FillEllipe—封闭实心椭圆、FillPath—GraphicsPath对象、FillPie—绘制实心圆饼、FillPolygon—绘制实心多边形、FillRectangle—绘制实心矩形、FillRectangles—绘制实心矩形组、FillRegion—绘制实心Region对象

二、画笔和画刷


Pen
在System.Drawing名称空间中,用来指定图形的轮廓,如颜色和宽度等。

1.画笔创建


Dim pen As New Pen(Color.AliceBlue, 5)

2.画笔的属性


属性
描述
取值

Alignment
指定相对于理论上、零宽度的线条的Pen对象的对齐方式
PenAlignment.Center:位于所绘制线条的中央
PenAlignment.Insert:位于所绘制线条的嵌入内部
PenAlignment.Left:位于所绘制线条的左侧
PenAlignment.OutSet:位于所绘制线条的嵌入外部
PenAlignment.Right:位于所绘制线条的右侧

DashStyle
绘制线条的虚线类型

DashStyle.Custom:用户自定义
DashStyle.Dash:线条由线段组成
DashStyle.DashDot:线条由线段和点组成
DashStyle.DashDotDot:线条由线段、点和点组成
DashStyle.Dot:线条由点组成
DashStyle.Solid:线条由实线组成

StartCap
EndCap

绘制线条的起点和终点类型

AnchorMask指定用于检查线帽是否为锚头帽的掩码。ArrowAnchor指定箭头状锚头帽。Custom指定自定义线帽。DiamondAnchor指定菱形锚头帽。Flat指定平线帽。
NoAnchor指定没有锚。Round指定圆线帽。
RoundAnchor指定圆锚头帽。Square指定方线帽。
SquareAnchor指定方锚头帽。Triangle指定三角线帽。

Brush
Brush对象是一个抽象类,不能被直接使用。它有5个派生类,分别实行不同类型的画刷。
画刷类型:SolidBrush:实心画刷(最简单)、HatchBrush:带阴影线的画刷、LinearGradientBrush:填充颜色线性渐变的画刷、PathGradientBrush:填充颜色沿路径渐变的画刷、TextureBrush:使用图像进行填充的画刷。

三、绘制的图形


直线的绘制
DrawLine、DrawLines

圆弧、矩形和椭圆
1.圆弧
确定矩形边框,指定起始角度和跨越角度。角度以度数为单位,即360表示一周
2.椭圆:确定外接矩形

绘制曲线
DrawCurve、DrawClosedCurve、DrawBezier

 

绘制路径(GraphicsPath)
路径是一系列图形的组合
GraphicsPath的方法

描述 方法
路径形成
• AddArc 椭圆弧
• AddBezier 贝赛尔曲线
• AddBeziers 互联贝赛尔曲线
• AddClosedCurve 闭合曲线
• AddElipse 椭圆
• AddLine 线
• AddLines 互联的线
• AddPath 将制定的对象追加入
• AddPie 扇形轮廓
• AddPolygon 多边形
• AddRectangle 矩形
• AddRectangles 一系列矩形
• AddString 字符串文本

路径绘制
• DrawPath

路径填充
• FillPath

四、文本和字体


Font类
FontFamiliy:字体家族,如Times New Roman、宋体等
字体大小:float类型
字体风格
Bold:粗体
Italic:斜体
Regular:正规
Strikeout:加删除线
Underline:加下划线
例如:
Dim myFont As new Font(“宋体”,16,FontStyle.Bold|FontStyle.Italic);
以上代码创建了宋体家族的字体对象,字体大小为16,样式为粗斜体。

DrawString的使用方法(注意,Font是“刷”Brush出来的)
DrawString(string,Font,Brush,PointF);
DrawString(string,Font,Brush,RectangleF);
DrawString(string,Font,Brush,PointF,StringFormat);
DrawString(string,Font,Brush,RectangleF,StringFormat);
DrawString(string,Font,Brush,float,float);
DrawString(string,Font,Brush,float,float,StringFormat);

反锯齿
消除锯齿:指对绘制的图形和文本的粗糙边缘进行平滑处理以改进它们的外观或可读性。
修改Graphics对象的TextRenderingHint属性,取值为:TextRenderingHint.AntiAlias、TextRenderingHint.AntiAliasGridFit、TextRenderingHint.ClearTypeCridFit、TextRenderingHint.SingleBitPerPixel、TextRenderingHint.SingleBitPerPixelGridFit、TextRenderingHint.SystemDefault
位于System.Drawing.Text名称空间中

TextRenderingHint属性
属性 描述
AntiAlias
在无提示的情况下使用每个字符的消除锯齿效果标志符号位图来绘制字符。由于采用了AntiAlias,质量会得到改善。由于关闭了提示,主干宽度差可能会比较明显。

AntiAliasGridFit
在有提示的情况下使用每个字符的消除锯齿效果标志符号位图来绘制字符。由于采用了AntiAlias,质量会得到大大改善,但同时会增加性能成本。

ClearTypeGridFit
在有提示的情况下使用每个字符的标志符号ClearType位图来绘制字符。这是质量最高的设置。用于利用ClearType字体功能。

SingleBitPerPixel
使用每个字符的标志符号位图来绘制字符。不使用提示。

SingleBitPerPixelGridFit
使用每个字符的标志符号位图来绘制字符。提示用于改善字符在主干和弯曲部分的外观。

SystemDefault
有系统默认呈现提示的情况下使用每个字符的标志符号位图来绘制字符。将采用用户为系统选择的任何字体修匀设置来绘制文本。

五、双缓冲


闪烁是图形编程的一个常见问题。需要多重复杂绘制操作的图形操作会导致呈现的图像闪烁或具有其他不可接受的外观。为解决这些问题,.NET Framework2.0 提供了对双缓冲的使用。
双缓冲使用内存缓冲区来解决由多重绘制操作造成的闪烁问题。当启用双缓冲时,所有绘制操作首先呈现到内存缓冲区,而不是屏幕上的绘图图面。所有绘制操作完成后,内存缓冲区直接复制到与其关联的绘图图面。因为在屏幕上只执行一个图形操作,所以消除了由复杂绘制操作造成的图像闪烁。

使用双缓冲
默认情况下,标准Windows 窗体控件是双缓冲的。
可以通过两种方法对窗体和所创作的控件启用默认双缓冲。
一种方法是将DoubleBuffered属性设置为true,另一种方法是通过调用SetStyle方法将OptimizedDoubleBuffer标志设置为true。两种方法都将为窗体或控件启用默认双缓冲并提供无闪烁的图形呈现。建议仅对已为其编写所有呈现代码的自定义控件调用SetStyle方法。

双缓冲相关类
BufferedGraphicsContext:负责单独分配和管理图形缓冲区。Allocate 方法可以创建BufferedGraphics。
BufferedGraphics:为双缓冲提供图形缓冲区。可以用Render()方法写入图形缓冲区的内容。