比派克还派克——用Pen在Graphics上面画线的若干细节

原创 2006年06月21日 11:15:00

比派克还派克

参考:

GDI+编程10个基本技巧”

"橡皮筋"

用钢笔在画布上画出虚线


要在Graphics对象上画出虚线,以及虚线边框的几何形状,关键全在Pen对象上。


Pen.DashStyle——用于设置虚线样式。该属性接收一个DashStyle枚举。

Dash

点画线

DashDot

点画线点

DashDotDot

点画线点点

Dot

Solid

实线

Custom

用户自定义的线型


protected override void OnPaint(PaintEventArgs e)

{

base.OnPaint (e);


Pen p = new Pen(Color.Red);

p.DashStyle = DashStyle.Dash;


e.Graphics.DrawLine(p, new Point(10, 10), new Point(300, 300));

}



Pen.DashCap——短划线终点的线相样式。该属性接受一个Dash枚举。

Flat

两端均为方形的方相。

Round

两端均为圆角的圆相。

Triangle

两端均为带三角的三角相。


protected override void OnPaint(PaintEventArgs e)

{

base.OnPaint (e);


// Set the SmoothingMode property to smooth the line.

e.Graphics.SmoothingMode =

System.Drawing.Drawing2D.SmoothingMode.AntiAlias;


// Create a new Pen object.

Pen greenPen = new Pen(Color.Green);


// Set the width to 6.

greenPen.Width = 6.0F;


// Set the DashCap to round.

greenPen.DashCap = System.Drawing.Drawing2D.DashCap.Round;


// Create a custom dash pattern.

greenPen.DashPattern = new float[]{4.0F, 2.0F, 1.0F, 3.0F};


// Draw a line.

e.Graphics.DrawLine(greenPen, 20.0F, 20.0F, 100.0F, 240.0F);


// Change the SmoothingMode to none.

e.Graphics.SmoothingMode =

System.Drawing.Drawing2D.SmoothingMode.None;


// Draw another line.

e.Graphics.DrawLine(greenPen, 100.0F, 240.0F, 160.0F, 20.0F);


// Dispose of the custom pen.

greenPen.Dispose();

}


Pen.DashOffset——直线的起点到短划线图案起始处的距离。

Pen.DashPattern——自定义的短划线和空白区域的数组。


给直线画上箭头


Pen.StartCap——直线起点的线相样式。

Pen.EndCap——直线终点的线相样式。


这两个属性都接受LineCap枚举。


protected override void OnPaint(PaintEventArgs e)

{

base.OnPaint (e);

Pen p = new Pen(Color.Red);

p.Width = 20;

p.StartCap = LineCap.RoundAnchor;

p.EndCap = LineCap.DiamondAnchor;


e.Graphics.DrawLine(p, 50, 50, 250, 250);

}


Pen.CustomStartCap——自定义的直线段起点线相样式。

Pen.CustomEndCap——自定义的直线段终点线相样式。

这两个属性接受CustomLineCap对象。


protected override void OnPaint(PaintEventArgs e)

{

base.OnPaint (e);

GraphicsPath hPath = new GraphicsPath();


// Create the outline for our custom end cap.

hPath.AddLine(new Point(0, 0), new Point(0, 5));

hPath.AddLine(new Point(0, 5), new Point(5, 1));

hPath.AddLine(new Point(5, 1), new Point(3, 1));


// Construct the hook-shaped end cap.

CustomLineCap HookCap = new CustomLineCap(null, hPath);


// Set the start cap and end cap of the HookCap to be rounded.

HookCap.SetStrokeCaps(LineCap.Round, LineCap.Round);


// Create a pen and set end custom start and end

// caps to the hook cap.

Pen customCapPen = new Pen(Color.Black, 5);

customCapPen.CustomStartCap = HookCap;

customCapPen.CustomEndCap = HookCap;


// Create a second pen using the start and end caps from

// the hook cap.

Pen capPen = new Pen(Color.Red, 10);

LineCap startCap;

LineCap endCap;

HookCap.GetStrokeCaps(out startCap, out endCap);

capPen.StartCap = startCap;

capPen.EndCap = endCap;


// Create a line to draw.

Point[] points = { new Point(100, 100), new Point(200, 50),

new Point(250, 300) };


// Draw the lines.

e.Graphics.DrawLines(capPen, points);

e.Graphics.DrawLines(customCapPen, points);

}


参考:

GDI+编程10个基本技巧”

"橡皮筋"


GDI+基础知识三 钢笔(pen)和笔刷(brush) 1

在谈到绘制图形时,钢笔和笔刷是最基本的工具。在Graphics类中,大多数函数都需要使用Pen或Brush对象,在GDI+中,Pen类主要用于绘制直线、曲线和图形的边框,而Brush类以各种颜色和图案...
  • u011582377
  • u011582377
  • 2014年02月07日 18:13
  • 2314

C#开发教程--如何绘制箭头

Graphics g = e.Graphics; g.SmoothingMode = SmoothingMode.AntiAlias; g.FillRectangle(Brushes.Whit...
  • wanglixin1999
  • wanglixin1999
  • 2014年11月16日 23:09
  • 4166

Cocos2d-x 3.3 的3D开发功能介绍

主要有以下功能: 1. 基本的Sprite3D使用,加载静态模型和动态模型,看 Sprite3DBasicTest 2.Sprite3D对象的旋转,缩放等Action操作 3.Sprite3D中使用S...
  • sdhjob
  • sdhjob
  • 2014年09月26日 12:12
  • 13333

图表控件TeeChart干货分享(绘制2D、3D实时曲线---VC++示例源代码--网络首发)

最近接手了一个项目,其中涉及到MFC和实时曲线显示的问题,由于我之前从未接触过此类技术,现学现搞,把其间用到的觉得对初学者有用的东西,总结一下。 尤其是关于TeeChart控件部分,网上资料零碎,且很...
  • yang_yulei
  • yang_yulei
  • 2014年07月28日 08:37
  • 25367

派克变换(对导数)

对于三相对称电流的导数进行派克变换,是经常遇到的问题。 派克变换的公式如下: Tabc/dq0=k∗⎡⎣⎢⎢⎢⎢cosθcos(θ−2π3)cos(θ+2π3)−sinθ−sin(θ−2π3)−s...
  • chenjianbo88
  • chenjianbo88
  • 2016年11月08日 15:39
  • 1333

Clark变换与Park(派克)变换

clark变换:将abc 变换到 静止 的αβ\alpha \beta 坐标系下。 Park变换:将abc 变换到 旋转 的 dqdq 坐标系下。 记三相对称电压如下: Ua=Ub=Uc=Vmc...
  • chenjianbo88
  • chenjianbo88
  • 2016年11月03日 22:36
  • 10806

解决Swap file ".ceshi.c.swp" already exists!问题

关于swp文件:使用vi,经常可以看到swp这个文件,那这个文件是怎么产生的呢,当你打开一个文件,vi就会生成这么一个.(filename)swp文件以备不测,如果你正常退出,那么这个.(filena...
  • my_Wade
  • my_Wade
  • 2015年07月05日 12:52
  • 3461

深入 char * ,char ** ,char a[ ] ,char *a[] 内核

C语言中由于指针的灵活性,导致指针能代替数组使用,或者混合使用,这些导致了许多指针和数组的迷惑,因此,刻意再次深入探究了指针和数组这玩意儿,其他类型的数组比较简单,容易混淆的是字符数组和字符指针这两个...
  • daiyutage
  • daiyutage
  • 2013年02月23日 15:34
  • 83015

C# 画点画线写字

本来是想好好学习趁毕设好好学习下JAVA的,但是我JAVA真心不熟,为了开发速度,还是搓搓地选择了用VS2008+C# 了,说实话,这个比java稍微熟一些,但是还是不够熟练,需要好好锻炼自己的代码能...
  • litoupu
  • litoupu
  • 2012年11月26日 20:59
  • 3463

绘制平滑线条的winform窗体

protected override void OnPaint(PaintEventArgs e)         {             try             {       ...
  • wohhm
  • wohhm
  • 2016年12月08日 18:36
  • 522
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:比派克还派克——用Pen在Graphics上面画线的若干细节
举报原因:
原因补充:

(最多只允许输入30个字)