使用钢笔绘制线条和形状
一。如何:使用钢笔绘制线条
若要绘制线条,需要 Graphics 对象和 Pen 对象。Graphics 对象提供 DrawLine 方法,而 Pen 对象则存储线条的特征,如颜色和宽度。
示例
下面的示例绘制一条从 (20, 10) 到 (300, 100) 的直线。第一条语句使用 Pen 类构造函数创建黑色钢笔。传递给 Pen 构造函数的参数之一是用 FromArgb 方法创建的 Color 对象。用于创建 Color 对象的值(255、0、0、0)对应于颜色的 alpha、红色、绿色和蓝色分量。这些值定义不透明的黑色钢笔。
Pen pen = new Pen(Color.FromArgb(255, 0, 0, 0)); e.Graphics.DrawLine(pen, 20, 10, 300, 100);
编译代码
前面的示例是为使用 Windows 窗体而设计的,它需要 Paint 事件处理程序的参数 PaintEventArgs e。
请参见
参考
概念
其他资源
若要绘制矩形,需要 Graphics 对象和 Pen 对象。Graphics 对象提供 DrawLine 方法,而 Pen 对象则存储线条的特征,如颜色和宽度。
示例
下面的示例绘制一个左上角位于 (10, 10) 的矩形。该矩形的宽度为 100,高度为 50。传递给 Pen 构造函数的第二个参数表明钢笔的宽度为 5 个像素。
绘制该矩形时,钢笔以矩形边界为中心线居中。因为钢笔的宽度是 5,矩形的边被绘制为 5 个像素宽,因此 1 个像素绘制在边界本身,2 个像素绘制在内侧,2 个像素绘制在外侧。有关钢笔对齐方式的详细信息,请参见如何:设置钢笔的宽度和对齐方式。
下面的插图显示结果矩形。虚线表明当钢笔的宽度为 1 个像素时矩形被绘制的位置。矩形左上角的放大视图显示黑色粗线条以这些虚线为中心线居中。
![](http://i.msdn.microsoft.com/32t0cdd6.Local_-7318767_pens1%28zh-cn,VS.80%29.gif)
Pen blackPen = new Pen(Color.FromArgb(255, 0, 0, 0), 5); e.Graphics.DrawRectangle(blackPen, 10, 10, 100, 50);
编译代码
前面的示例是为使用 Windows 窗体而设计的,它需要 Paint 事件处理程序的参数 PaintEventArgs e。
请参见
其他资源
使用钢笔绘制线条和形状
在创建 Pen 时,可将笔的宽度作为参数之一提供给构造函数。还可用 Pen 类的 Width 属性更改笔的宽度。
理论线条的宽度为 0。当绘制一条 1 个像素宽的线条时,像素以理论线条为中心线分布。如果绘制的线条宽度大于 1 个像素,则这些像素要么以理论线条为中心线分布,要么出现在理论线条的一侧。可设置 Pen 的笔对齐方式属性,以确定用该笔绘制的像素相对于理论线条如何定位。
在下面的代码示例中显示的值 Center、Outset 和 Inset 为 PenAlignment 枚举的成员。
下面的代码示例绘制一段线条两次:一次用宽度为 1 的黑色钢笔,一次用宽度为 10 的绿色钢笔。
改变钢笔的宽度
将 Alignment 属性的值设置为 Center(默认值),以指定用绿色钢笔绘制的像素以理论线条为中心线分布。下面的插图显示结果线条。
下面的代码示例绘制一个矩形两次:一次用宽度为 1 的黑色钢笔,一次用宽度为 10 的绿色钢笔。
Pen blackPen = new Pen(Color.FromArgb(255, 0, 0, 0), 1); Pen greenPen = new Pen(Color.FromArgb(255, 0, 255, 0), 10); greenPen.Alignment = PenAlignment.Center; // Draw the line with the wide green pen. e.Graphics.DrawLine(greenPen, 10, 100, 100, 50); // Draw the line with the thin black pen. e.Graphics.DrawLine(blackPen, 10, 100, 100, 50);
更改钢笔的对齐方式
将 Alignment 属性的值设置为 Center,以指定用绿色钢笔绘制的像素以矩形边界为中心分布。
下面的插图显示结果矩形。
Pen blackPen = new Pen(Color.FromArgb(255, 0, 0, 0), 1); Pen greenPen = new Pen(Color.FromArgb(255, 0, 255, 0), 10); greenPen.Alignment = PenAlignment.Center; // Draw the rectangle with the wide green pen. e.Graphics.DrawRectangle(greenPen, 10, 100, 50, 50); // Draw the rectangle with the thin black pen. e.Graphics.DrawRectangle(blackPen, 10, 100, 50, 50);
创建嵌入钢笔
可通过将上述代码示例中的第三条语句修改为以下语句来更改绿色钢笔的对齐方式:
greenPen.Alignment = PenAlignment.Inset;
现在,绿色宽线条中的像素出现在矩形的内侧,如下面的插图所示。
请参见
其他资源
使用钢笔绘制线条和形状
Windows 窗体中的图形和绘制
可用形状多样的线帽来绘制线条的起点或终点。GDI+ 支持多种线帽,如圆形、方形、菱形和箭头。
示例
您可为线条的起点、线条的终点或虚线的短划线指定线帽,分别称为起始线帽、终止线帽和短划线线帽。
下面的示例绘制一端为箭头线帽、另一端为圆形线帽的线条。下面的插图显示产生的线条:
Pen pen = new Pen(Color.FromArgb(255, 0, 0, 255), 8); pen.StartCap = LineCap.ArrowAnchor; pen.EndCap = LineCap.RoundAnchor; e.Graphics.DrawLine(pen, 20, 175, 300, 175);
编译代码
创建一个 Windows 窗体并处理窗体的 Paint 事件。将示例代码粘贴到 Paint 事件处理程序中,并传递 e 作为 PaintEventArgs。
请参见
参考
System.Drawing.Drawing2D.LineCap
其他资源
使用钢笔绘制线条和形状
线条联接点是由两条端点相交或重叠的线条构成的共同区域。GDI+ 提供了三种线条联接样式:斜接、斜切和圆。线条联接样式是 Pen 类的一个属性。当为 Pen 对象指定线条联接样式时,联接样式将应用到任何使用该笔绘制的 GraphicsPath 对象中的所有连接线条。
下面的插图演示产生的斜切线条联接的结果。
示例
可通过使用 Pen 类的 LineJoin 属性指定线条联接样式。下面的示例演示水平线条和垂直线条之间的斜切线条联接。在下面的代码中,赋给 LineJoin 属性的值 Bevel 为 LineJoin 枚举的一个成员。LineJoin 枚举的其它成员是:Miter 和 Round。
GraphicsPath path = new GraphicsPath(); Pen penJoin = new Pen(Color.FromArgb(255, 0, 0, 255), 8); path.StartFigure(); path.AddLine(new Point(50, 200), new Point(100, 200)); path.AddLine(new Point(100, 200), new Point(100, 250)); penJoin.LineJoin = LineJoin.Bevel; e.Graphics.DrawPath(penJoin, path);
编译代码
前面的示例是为使用 Windows 窗体而设计的,它需要 Paint 事件处理程序的参数 PaintEventArgs e。
请参见
其他资源
GDI+ 提供 DashStyle 枚举中列出的几种虚线样式。如果这些标准的虚线样式不能满足需求,则可创建自定义的虚线模式。
示例
若要绘制自定义虚线,请将短划线和间距的长度放在一个数组中,并将该数组指定为 Pen 对象的 DashPattern 属性的值。下面的示例绘制了一条基于 {5, 2, 15, 4} 数组的自定义的虚线。如果将数组元素乘以钢笔的宽度 5,可得到 {25, 10, 75, 20}。显示的短划线的长度在 25 和 75 之间交替,间距的长度在 10 和 20 之间交替。
下面的插图显示结果虚线。请注意,最后一段短划线不得不短于 25 个单位,以便线条的终点落在 (405, 5) 上。
float[] dashValues = { 5, 2, 15, 4 }; Pen blackPen = new Pen(Color.Black, 5); blackPen.DashPattern = dashValues; e.Graphics.DrawLine(blackPen, new Point(5, 5), new Point(405, 5));
编译代码
创建一个 Windows 窗体并处理窗体的 Paint 事件。将上面的代码粘贴到 Paint 事件处理程序中。
请参见
其他资源
使用钢笔绘制线条和形状
七。如何:绘制用纹理填充的线条
您可以不用纯色绘制线条,而用纹理绘制线条。若要绘制带有纹理的直线和曲线,请创建 TextureBrush 对象,并将该 TextureBrush 对象传递给 Pen 构造函数。与该纹理刷相关联的位图用于平铺平面(不可见),然后当钢笔绘制直线或曲线时,钢笔的笔划揭开平铺纹理的某些像素。
示例
下面的示例从文件 Texture1.jpg 创建 Bitmap 对象。位图用于构造 TextureBrush 对象,而 TextureBrush 对象用于构造 Pen 对象。对 DrawImage 的调用将绘制该位图,位图的左上角位于 (0, 0)。对 DrawEllipse 的调用将使用 Pen 对象绘制带纹理的椭圆。
下面的插图显示该位图和带纹理的椭圆。
Bitmap bitmap = new Bitmap("Texture1.jpg"); TextureBrush tBrush = new TextureBrush(bitmap); Pen texturedPen = new Pen(tBrush, 30); e.Graphics.DrawImage(bitmap, 0, 0, bitmap.Width, bitmap.Height); e.Graphics.DrawEllipse(texturedPen, 100, 20, 200, 100);
编译代码
创建一个 Windows 窗体并处理窗体的 Paint 事件。将上面的代码粘贴到 Paint 事件处理程序中。用一个对您的系统有效的图像替换 Texture.jpg。
请参见
其他资源
使用钢笔绘制线条和形状
Windows 窗体中的图形和绘制
使用钢笔绘制线条和形状相关推荐
- python PyQt5中文教程☞【第十节】PyQt5绘图(绘制文本drawText()、画点drawPoints()、设置颜色、QPen(画笔)绘制线条、QBrush(笔刷)绘制纹理
引用文章:http://code.py40.com/pyqt5/32.html 文章目录 绘制文本 画点 PyQt5颜色 QPen(画笔) QBrush(笔刷) 总结:一发现有事件触发就会更新QWid ...
- python立体爱心_css绘制各种各样的形状图形
我们在编写前端代码时,经常会遇到各种各样的形状图形(如:边框对话框,三角形,平行四边形.圆角边框.圆形.四叶草.花瓣等),除了用背景图片(css雪碧图或css精灵图+定位引用)和插入img图片的方法, ...
- MATLAB 快速绘制曲线图的形状,粗细,颜色
目录 MATLAB 快速绘制曲线图的形状,粗细,颜色 1.通过改变R-G-B 的值改变线条的颜色: 2.通过改变c∈[1,+∞)的值改变线条的粗细: 3.线条形状,粗细,颜色选择: 4.Matlab中 ...
- Cocos2d-x之绘制线条
Cocos2d-x之绘制线条 自定义的方法 Line.h 1 // 2 // Line.h 3 // L01DrawingAPI 4 // 5 // Created by Mac OS 10.9.3 ...
- QT实现绘制3D基本形状
QT实现绘制3D基本形状 一项目简介 二项目技术 三项目展示 主要源码片段解析 获取完整项目源码传送门 一项目简介 显示Qt 3D提供的四个基本形状,并为每个形状设置一个网格. 基本形状显示了Qt 3 ...
- 用html5做一条线,使用HTML5 canvas绘制线条的方法
使用HTML5 canvas绘制线条的方法 发布时间:2020-08-29 11:24:23 来源:亿速云 阅读:96 作者:小新 这篇文章主要介绍了使用HTML5 canvas绘制线条的方法,具有一 ...
- java 在底图上绘制线条_使用底图和geonamescache绘制k表示聚类
java 在底图上绘制线条 This is the third of four stories that aim to address the issue of identifying disease ...
- iOS 动画绘制线条颜色渐变的折线图
效果图 .................... 概述 现状 折线图的应用比较广泛,为了增强用户体验,很多应用中都嵌入了折线图.折线图可以更加直观的表示数据的变化.网络上有很多绘制折线图的demo,有 ...
- Unity3D 使用 GL 绘制线条
本文永久地址:http://www.omuying.com/article/77.aspx,[文章转载请注明出处!] 在前两篇中,我们使用了 Graphics(查看详情)以及 Line Rendere ...
最新文章
- ASP.NET 2.0 页面编译方式
- Sentinel限流规则
- JavaScript强化教程—— RegExp 对象
- it : Tmaster (hook declined) error: failed to push some refs to https://xxx/biluo/xxx.git
- 【OpenCV应用】python处理行李图像匹配项目——图像特征点
- Python 之 模块和包
- 用口诀背英语单词绿色版简介
- omnet++ 中tictoc10-12学习笔记
- Sublime 使用笔记(九):汉字乱码问题的解决方法
- PHP字体间距设置,wps字间距怎么调整
- 多目标优化系列(四)RM-MEDA
- Wireline SerDes,高速信号的均衡技术
- Java学习笔记——Number类
- python int() round() floor()函数的比较
- HDU 5405 (树链剖分+线段树)
- vmybatis #{} 以及 ${}与sql注入
- 2020-05-06
- dbg-macro:C++代码调试小工具
- 年薪高达218万元,12家独角兽公司工程师薪资曝光,这些岗位最吃香
- 12.2.5 图形化日志工具——系统日志查看器