本篇文章给大家谈谈vb.netGDI+入门——使用Graphics对象填充图形,以及vb.netgridview的知识点,同时本文还将给你拓展C#GDI+编程之Graphics类、C#GDIgraph
本篇文章给大家谈谈vb.net GDI+入门——使用Graphics对象填充图形,以及vb.net gridview的知识点,同时本文还将给你拓展C# GDI + 编程之 Graphics 类、C# GDI graphics.DrawImage 的参数问题、C# GDI+之Graphics类 z、c# – GDI:如何在背景线程上将Graphics对象渲染为位图?等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- vb.net GDI+入门——使用Graphics对象填充图形(vb.net gridview)
- C# GDI + 编程之 Graphics 类
- C# GDI graphics.DrawImage 的参数问题
- C# GDI+之Graphics类 z
- c# – GDI:如何在背景线程上将Graphics对象渲染为位图?
vb.net GDI+入门——使用Graphics对象填充图形(vb.net gridview)
上一章我们了解如何使用Graphics对象来绘制由点和线构成的线图《vb.net GDI+入门——使用Graphics对象绘制线图》,在实际绘图中,我们还需要使用色块等来填充图形,这一章,
就来看如何在vb.net中使用Graphics对象来填充图形。
注:以下所有示例都假设我们在窗体上拖放了一个PictureBox控件,一个Button控件。
一、FillClosedCurve 方法
FillClosedCurve 方法用于填充由 Point 结构数组定义的闭合基数样条曲线的内部。其格式为:
FillClosedCurve(Brush,Point())
如下代码所示,我们定义一个包含四个点的数组作为曲线的基点,同时创建一个蓝色的纯色笔刷来填充它内部:
Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Click
Dim g As Graphics = Me.PictureBox1.CreateGraphics
Dim mBrush As New SolidBrush(Color.Blue)
Dim p(3) As Point
p(0).X = 100
p(0).Y = 15
p(1).X = 80
p(1).Y = 90
p(2).X = 90
p(2).Y = 120
p(3).X = 130
p(3).Y = 150
g.FillClosedCurve(mBrush,p)
End Sub
运行后如下图一所示:
本例所示的只是FillClosedCurve 方法的一种最简单的重载版本,它还有几个比较重载方式,读者可以借助MSDN的帮助进行了解。
二、FillEllipse 方法
该方法用于填充有一个边框所定义的椭圆的内部,该边框由一对左上角坐标、一个宽度和一个高度指定。它的一个重载版本如下所示:
FillEllipse(Brush,x,y,width,height)
如下示例,我们用蓝色笔刷填充一个宽为120,高为100,左上角坐标为(20,20)的椭圆:
Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Click
Dim g As Graphics = Me.PictureBox1.CreateGraphics
Dim mBrush As New SolidBrush(Color.Blue)
g.FillEllipse(mBrush,20,120,100)
End Sub
运行效果如下图二所示:
如果需要填充一个正圆,只需要把宽和高设置为一致就可以了,注意这里的左上角左边并不是椭圆的中心点。
三、FillPie 方法
FillPie 方法填充由一对坐标、一个宽度、一个高度以及两条射线指定的椭圆所定义的扇形区的内部,即填充一个饼状图。它填充由椭圆的一段弧线和与该弧线端点相交的两条射线定义的扇形区的内部。该椭圆由边框定义。扇形区由 startAngle 和 sweepAngle 参数定义的两条射线以及这两条射线与椭圆交点之间的弧线组成。如果 sweepAngle 参数大于 360 度或小于 -360 度,则将其分别视为 360 度或 -360 度。
FillPie 方法的格式如下所示:
FillPie(redBrush,height,startAngle,sweepAngle)
x,height指定了椭圆的矩形的位置和大小;startAngle,sweepAngle分别定义起始角度(相对于 x 轴)和扫描角度(两者都沿顺时针方向)。
如下代码是所示,我们使用一个蓝色的笔刷填充一个饼状图:
Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Click
Dim g As Graphics = Me.PictureBox1.CreateGraphics
Dim mBrush As New SolidBrush(Color.Blue)
Dim x As Single = 0.0F
Dim y As Single = 0.0F
Dim width As Single = 150.0F
Dim height As Single = 100.0F
Dim startAngle As Single = 0.0F
Dim sweepAngle As Single = 95.0F
g.FillPie(mBrush,sweepAngle)
End Sub
运行效果如下图三所示:
四、Fillpolygon 方法
Fillpolygon 方法可以填充 Point 结构指定的点数组所定义的多边形的内部,Point 数组中每两个相邻点指定多边形的一个边,如果最后一个点和第一个点不重合,则这两个点指定多边形的闭合边。
它的格式如下所示:
Fillpolygon(Brush,Point(),FillMode)
其中FillMode参数可以缺省,它用于确定填充样式的 FillMode 枚举的成员。
下面示例,我们创建一个蓝色的画刷,填充一个由6个顶点确定的不规则多边形:
Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Click
Dim g As Graphics = Me.PictureBox1.CreateGraphics
Dim mBrush As New SolidBrush(Color.Blue)
Dim point1 As New Point(0,0)
Dim point2 As New Point(130,25)
Dim point3 As New Point(140,50)
Dim point4 As New Point(150,50)
Dim point5 As New Point(130,100)
Dim point6 As New Point(150,150)
Dim Point() As Point = {point1,point2,point3,point4,point5,point6}
g.Fillpolygon(mBrush,Point)
End Sub
运行后效果如下图四所示:
五、FillRectangle 方法
FillRectangle 方法可以填充由一对坐标、一个宽度和一个高度指定的矩形的内部,它的格式如下:
FillRectangle(blueBrush,height)
x、y为要填充的矩形的左上角的坐标点,width是要填充的矩形的宽度,height是要填充的矩形的高度。
Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Click
Dim g As Graphics = Me.PictureBox1.CreateGraphics
Dim mBrush As New SolidBrush(Color.Blue)
Dim x As Single = 10.0F
Dim y As Single = 10.0F
Dim width As Single = 100.0F
Dim height As Single = 100.0F
g.FillRectangle(mBrush,height)
End Sub
运行后效果如下图五所示:
六、FillRectangles 方法
FillRectangles 方法填充由 Rectangle 结构指定的一系列矩形的内部,它实际上就是FillRectangle 方法的一个加强版本,能一次填充多个矩形,这里就不针对它进行说明了。
使用Grapics对象填充图形的方法基本上就是上面几种了,但是Graphics对象的方法并不止于这些内容,请你继续关注我们巧巧读书网,了解更多的GDI+绘图基础知识。
C# GDI + 编程之 Graphics 类
GDI + 是 GDI 的后继者,它是.NET Framework 为操作图形提供的应用程序编程接口,主要用在窗体上绘制各种图形图像,可以用于绘制各种数据图像、数学仿真等。
Graphics 类是 GDI + 的核心,它提供将对象绘制到显式设备的方法。Graphics 类封装了绘制直线、曲线、圆形、图像和文本的方法,是一切 GDI + 操作的基础类。在绘图之前,必须在指定的窗体上创建一个 Graphics 对象,才能调用 Graphics 类的方法画图。
一、创建 Graphics 类对象的的三种方法
1.1 Paint 事件
在窗体或控件的 Paint 事件中创建,将其作为 PaintEventArgs 的一部分。在为控件创建绘制代码时,通常会使用此方法。
例如,在 Paint 事件中创建 Graphics 对象:
private void Form1_Paint(object sender, PaintEventArgs e) //窗体的Paint事件
{
Graphics g = e.Graphics; //创建Graphics对象
}
1.2 CreateGraphics 方法
调用窗体或控件的 CreateGraphics 方法可以获取对 Graphics 对象的引用,该对象表示控件或窗体的绘图画面。如果在已存在的窗体或控件身上绘图,应该使用此方法
例如,在窗体的 Load 事件中,通过 CreateGraphics 方法创建 Graphics 对象
private void Form1_Load(object sender, EventArgs e) //窗体的Load事件
{
Graphics g; //声明一个Graphics对象
g = this.CreateGraphics();
}
1.3 Graphics.FromImage 方法
由从 Image 继承的任何对象创建 Graphics 对象,调用 Graphics.FromImage 方法即可,该方法在需要更改已存在的图像时十分有用,例:
private void Form1_Load(object sender, EventArgs e)
{
Bitmap mbit = new Bitmap(@"C:\test.bmp");
Graphics g = Graphics.FromImage(mbit);
}
二、Graphics 类的属性
Clip | 获取或设置 Region,它限定此 Graphics 的绘图区域。 |
ClipBounds | 获取一个 RectangleF 结构,该结构限定此 Graphics 的剪辑区域。 |
CompositingMode | 获取一个值,该值指定如何将合成图像绘制到此 Graphics。 |
CompositingQuality | 获取或设置绘制到此 Graphics 的合成图像的呈现质量。 |
DpiX | 获取此 Graphics 的水平分辨率。 |
DpiY | 获取此 Graphics 的垂直分辨率。 |
InterpolationMode | 获取或设置与此 Graphics 关联的插补模式。 |
IsClipEmpty | 获取一个值,该值指示此 Graphics 的剪辑区域是否为空。 |
IsVisibleClipEmpty | 获取一个值,该值指示此 Graphics 的可见剪辑区域是否为空。 |
PageScale | 获取或设置此 Graphics 的世界单位和页单位之间的比例。 |
PageUnit | 获取或设置用于此 Graphics 中的页坐标的度量单位。 |
PixelOffsetMode | 获取或设置一个值,该值指定在呈现此 Graphics 的过程中像素如何偏移。 |
RenderingOrigin | 为抵色处理和阴影画笔获取或设置此 Graphics 的呈现原点。 |
SmoothingMode | 获取或设置此 Graphics 的呈现质量。 |
TextContrast | 获取或设置呈现文本的灰度校正值。 |
TextRenderingHint | 获取或设置与此 Graphics 关联的文本的呈现模式。 |
Transform | 获取或设置此 Graphics 的几何世界转换的副本。 |
VisibleClipBounds | 获取此 Graphics 的可见剪辑区域的边框。 |
注:详情参考 MSDN 对 Graphics 属性的说明
三、Graphics 类的常用方法及说明
注:完整的 Graphics 方法请查看 MSDN 对 Graphics 方法的说明
由于时间有限,后续还会对 GDI+ 相关内容进行更新
原文出处:https://www.cnblogs.com/forever-Ys/p/10447617.html
C# GDI graphics.DrawImage 的参数问题
graphics.DrawImage(imageSource,
new System.Drawing.Point[] {
new System.Drawing.Point(1,1),
new System.Drawing.Point(3, 1),
new System.Drawing.Point(1, 3),
}
);
graphics.DrawImage(imageSource,
new System.Drawing.Point[] {
new System.Drawing.Point(1,3),
new System.Drawing.Point(3, 3),
new System.Drawing.Point(1, 5),
}
);
对于如上代码,
传入平行的点坐标,包含的点实际上每个都有3*3=9个点。
实际绘制的点只有 (2,2),(5,5) 两个点
所以如果要绘制到(1,1)(1,2)两个点需要这样设置参数
graphics.DrawImage(imageSource,
new System.Drawing.Point[] {
new System.Drawing.Point(-1,-1),
new System.Drawing.Point(1, -1),
new System.Drawing.Point(-1, 1),
}
);
graphics.DrawImage(imageSource,
new System.Drawing.Point[] {
new System.Drawing.Point(-1,0),
new System.Drawing.Point(1, 0),
new System.Drawing.Point(-1, 2),
}
);
C# GDI+之Graphics类 z
GDI+是GDI的后继者,它是.NET Framework为操作图形提供的应用程序编程接口,主要用在窗体上绘制各种图形图像,可以用于绘制各种数据图像、数学仿真等。
Graphics类是GDI+的核心,它提供将对象绘制到显式设备的方法。Graphics类封装了绘制直线、曲线、圆形、图像和文本的方法,是一切GDI+操作的基础类。在绘图之前,必须在指定的窗体上创建一个Graphics对象,才能调用Graphics类的方法画图。
一、创建Graphics类对象的的三种方法
1.1 Paint事件
在窗体或控件的Paint事件中创建,将其作为PaintEventArgs的一部分。在为控件创建绘制代码时,通常会使用此方法。
例如,在Paint事件中创建Graphics对象:
private void Form1_Paint(object sender, PaintEventArgs e) //窗体的Paint事件 { Graphics g = e.Graphics; //创建Graphics对象 }
1.2 CreateGraphics方法
调用窗体或控件的CreateGraphics方法可以获取对Graphics对象的引用,该对象表示控件或窗体的绘图画面。如果在已存在的窗体或控件身上绘图,应该使用此方法
例如,在窗体的Load事件中,通过CreateGraphics方法创建Graphics对象
private void Form1_Load(object sender, EventArgs e) //窗体的Load事件 { Graphics g; //声明一个Graphics对象 g = this.CreateGraphics(); }
1.3 Graphics.FromImage方法
由从Image继承的任何对象创建Graphics对象,调用Graphics.FromImage方法即可,该方法在需要更改已存在的图像时十分有用,例:
private void Form1_Load(object sender, EventArgs e)
{
Bitmap mbit = new Bitmap(@"C:\test.bmp"); Graphics g = Graphics.FromImage(mbit); }
二、Graphics类的属性
Clip | 获取或设置 Region,它限定此 Graphics 的绘图区域。 |
ClipBounds | 获取一个 RectangleF 结构,该结构限定此 Graphics 的剪辑区域。 |
CompositingMode | 获取一个值,该值指定如何将合成图像绘制到此 Graphics。 |
CompositingQuality | 获取或设置绘制到此 Graphics 的合成图像的呈现质量。 |
DpiX | 获取此 Graphics 的水平分辨率。 |
DpiY | 获取此 Graphics 的垂直分辨率。 |
InterpolationMode | 获取或设置与此 Graphics 关联的插补模式。 |
IsClipEmpty | 获取一个值,该值指示此 Graphics 的剪辑区域是否为空。 |
IsVisibleClipEmpty | 获取一个值,该值指示此 Graphics 的可见剪辑区域是否为空。 |
PageScale | 获取或设置此 Graphics 的世界单位和页单位之间的比例。 |
PageUnit | 获取或设置用于此 Graphics 中的页坐标的度量单位。 |
PixelOffsetMode | 获取或设置一个值,该值指定在呈现此 Graphics 的过程中像素如何偏移。 |
RenderingOrigin | 为抵色处理和阴影画笔获取或设置此 Graphics 的呈现原点。 |
SmoothingMode | 获取或设置此 Graphics 的呈现质量。 |
TextContrast | 获取或设置呈现文本的灰度校正值。 |
TextRenderingHint | 获取或设置与此 Graphics 关联的文本的呈现模式。 |
Transform | 获取或设置此 Graphics 的几何世界转换的副本。 |
VisibleClipBounds | 获取此 Graphics 的可见剪辑区域的边框。 |
注:详情参考MSDN对Graphics属性的说明
三、Graphics类的常用方法及说明
注:完整的Graphics方法请查看MSDN对Graphics方法的说明
c# – GDI:如何在背景线程上将Graphics对象渲染为位图?
private void RotationMenu_Click(object sender,System.EventArgs e) { Graphics g = this.CreateGraphics(); g.Clear(this.BackColor); Bitmap curBitmap = new Bitmap(@"roses.jpg"); g.DrawImage(curBitmap,200,200); // Create a Matrix object,call its Rotate method,// and set it as Graphics.Transform Matrix X = new Matrix(); X.Rotate(30); g.Transform = X; // Draw image g.DrawImage(curBitmap,new Rectangle(205,200),curBitmap.Width,curBitmap.Height,GraphicsUnit.Pixel); // dispose of objects curBitmap.dispose(); g.dispose(); }
我的问题有两个部分:
>你将如何在后台线程上完成this.CreateGraphics()?可能吗?我的理解是在这个例子中是一个UI对象.因此,如果我在后台线程上进行此处理,我将如何创建图形对象?
>一旦我完成处理,我将如何从我正在使用的Graphics对象中提取位图?我无法找到一个如何做到这一点的好例子.
另外:格式化代码示例时,如何添加换行符?如果有人可以给我发表评论,说明我真的很感激.谢谢!
解决方法
Graphics g = Graphics.FromImage(theImage);
Graphics对象不包含您绘制到它的图形,而只是它在另一个画布上绘制的工具,通常是屏幕,但它也可以是Bitmap对象.
因此,您不先绘制然后提取位图,首先创建位图,然后创建要在其上绘制的Graphics对象:
Bitmap destination = new Bitmap(200,200); using (Graphics g = Graphics.FromImage(destination)) { Matrix rotation = new Matrix(); rotation.Rotate(30); g.Transform = rotation; g.DrawImage(source,200); }
我们今天的关于vb.net GDI+入门——使用Graphics对象填充图形和vb.net gridview的分享就到这里,谢谢您的阅读,如果想了解更多关于C# GDI + 编程之 Graphics 类、C# GDI graphics.DrawImage 的参数问题、C# GDI+之Graphics类 z、c# – GDI:如何在背景线程上将Graphics对象渲染为位图?的相关信息,可以在本站进行搜索。
本文标签: