前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2023年12月 GDI+绘图专题 Pen

【愚公系列】2023年12月 GDI+绘图专题 Pen

原创
作者头像
愚公搬代码
发布2023-12-28 23:50:01
940
发布2023-12-28 23:50:01
举报
文章被收录于专栏:历史专栏历史专栏

🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,阿里云专家博主,腾讯云优秀博主,掘金优秀博主,51CTO博客专家等。 🏆《近期荣誉》:2022年CSDN博客之星TOP2,2022年华为云十佳博主等。

🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。

🏆🎉欢迎 👍点赞✍评论⭐收藏

🚀前言

Pen是在WinForm中用于绘制线条、轮廓和边框的对象。它定义了一个画笔,具有不同的颜色、宽度和样式。在绘制图形或图形对象时,Pen对象通常会与Graphics对象一起使用。

Pen类位于System.Drawing命名空间中,它有多个构造函数,可以接受不同的参数,如颜色、宽度、样式等。常用的Pen属性和方法包括:

  • Color:获取或设置Pen的颜色;
  • Width:获取或设置Pen的宽度;
  • DashStyle:获取或设置Pen的线条样式,如实线、虚线、点线等;
  • LineJoin:获取或设置Pen的线条连接方式,如直角、倒角、斜角等;
  • Dispose():释放Pen对象所占用的资源。

示例代码:

代码语言:csharp
复制
Pen pen = new Pen(Color.Red, 3); // 创建红色、宽度为3的Pen对象
e.Graphics.DrawLine(pen, startPoint, endPoint); // 在Graphics对象上绘制直线
pen.Dispose(); // 释放资源

🚀一、Pen

🔎1.属性

在WinForms中,Pen是一个用于绘制直线和形状边界的关键对象。下面是关于Pen属性的介绍和示例:

  1. ColorColor属性定义了笔的颜色,即绘制的线条或边界的颜色。

示例:

代码语言:csharp
复制
Pen myPen = new Pen(Color.Blue);
  1. BrushBrush属性定义了填充图形内部的画笔。可以使用SolidBrushLinearGradientBrush等类型的Brush

示例:

代码语言:csharp
复制
Pen myPen = new Pen(new SolidBrush(Color.Red));
  1. WidthWidth属性定义了笔的宽度,即线条或边界的粗细。

示例:

代码语言:csharp
复制
Pen myPen = new Pen(Color.Black, 2.0f); // 宽度为2个单位
  1. PenTypePenType属性不是Pen对象的属性。Pen对象没有直接提供这个属性。该属性是只读的,它的类型是由Brush的类型决定的;
  2. DashStyleDashStyle属性定义了虚线或点线的样式。

示例:

代码语言:csharp
复制
Pen myPen = new Pen(Color.Green);
myPen.DashStyle = DashStyle.Dash; // 使用虚线样式
  1. StartCapEndCap:这些属性定义了线条的起始和结束端点的形状,如平头、圆头等。

示例:

代码语言:csharp
复制
Pen myPen = new Pen(Color.Black);
myPen.StartCap = LineCap.Round; // 圆头
myPen.EndCap = LineCap.ArrowAnchor; // 箭头头
  1. DashCapDashCap属性定义了虚线段的端点样式。

示例:

代码语言:csharp
复制
Pen myPen = new Pen(Color.Blue);
myPen.DashStyle = DashStyle.DashDot;
myPen.DashCap = DashCap.Triangle; // 三角形虚线端点
  1. DashOffsetDashOffset属性定义了虚线模式中的起始偏移量。

示例:

代码语言:csharp
复制
Pen myPen = new Pen(Color.Red);
myPen.DashStyle = DashStyle.Dash;
myPen.DashOffset = 10.0f; // 从起始点偏移10个单位开始虚线
  1. LineJoinLineJoin属性定义了连接线段的方式,如尖角、圆角等。

示例:

代码语言:csharp
复制
Pen myPen = new Pen(Color.Black);
myPen.LineJoin = LineJoin.Round; // 圆角连接
  1. PenAlignmentPenAlignment属性定义了线条的对齐方式,可以是中心对齐、内部对齐或外部对齐。

示例:

代码语言:csharp
复制
Pen myPen = new Pen(Color.Green);
myPen.Alignment = PenAlignment.Inset; // 内部对齐
  1. GraphicsPathGraphicsPath属性不是Pen对象的属性,而是用于描述和存储图形路径的对象。通常,你会使用GraphicsPath来创建具有复杂形状的路径,然后使用Pen来绘制这些路径。

🔎2.构造函数

在WinForms中,Pen类有几个不同的构造函数,用于创建不同类型的画笔对象。以下是这些构造函数的介绍和示例:

  1. Pen(Color):这个构造函数接受一个颜色参数,用于定义画笔的颜色。画笔将以指定的颜色绘制线条。

示例:

代码语言:csharp
复制
Pen myPen = new Pen(Color.Blue);
  1. Pen(Brush):这个构造函数接受一个Brush参数,用于定义画笔的填充样式。画笔将使用指定的Brush来填充图形内部。

示例:

代码语言:csharp
复制
Brush myBrush = new SolidBrush(Color.Red);
Pen myPen = new Pen(myBrush);
  1. Pen(Color, Single):这个构造函数接受两个参数,第一个是颜色,第二个是线条的宽度(以浮点数表示)。它用于定义画笔的颜色和线条的粗细。

示例:

代码语言:csharp
复制
Pen myPen = new Pen(Color.Black, 2.0f); // 黑色画笔,宽度为2个单位
  1. Pen(Brush, Single):这个构造函数接受两个参数,第一个是Brush,第二个是线条的宽度(以浮点数表示)。它用于定义画笔的填充样式和线条的粗细。

示例:

代码语言:csharp
复制
Brush myBrush = new SolidBrush(Color.Green);
Pen myPen = new Pen(myBrush, 1.5f); // 绿色填充,宽度为1.5个单位

这些构造函数允许你根据需要创建不同颜色、样式和粗细的画笔对象。

🔎3.方法

在WinForms中,Pen类提供了一些方法来进行线条绘制的变换,其中一个方法是ScaleTransform。这个方法用于在绘制时对Pen对象进行缩放变换。以下是关于Pen.ScaleTransform方法的介绍和示例:

方法介绍

Pen.ScaleTransform(float scaleX, float scaleY) 方法用于将 Pen 对象的线条缩放。scaleX 参数表示水平方向的缩放比例,scaleY 参数表示垂直方向的缩放比例。这个方法可以用来改变线条的粗细,使其在绘制时变得更粗或更细。

示例

假设你有一个Pen对象 myPen,并且你想要将线条在水平方向上缩放为原来的2倍,垂直方向上缩放为原来的0.5倍,你可以使用ScaleTransform方法来实现这个效果:

代码语言:csharp
复制
Pen myPen = new Pen(Color.Blue, 2.0f); // 创建一个蓝色画笔,宽度为2个单位

// 缩放线条,水平方向缩放2倍,垂直方向缩放0.5倍
myPen.ScaleTransform(2.0f, 0.5f);

// 绘制一条线
Graphics graphics = this.CreateGraphics();
graphics.DrawLine(myPen, 20, 20, 200, 20);

// 不要忘记释放资源
myPen.Dispose();
graphics.Dispose();

在上面的示例中,ScaleTransform方法将myPen的线条水平方向缩放了2倍,垂直方向缩放了0.5倍。然后,使用Graphics对象的DrawLine方法绘制了一条线,这条线的粗细经过缩放变换。最后,别忘记释放资源,以避免资源泄漏。

🔎4.案例

以下是一个应用程序案例,演示如何使用Pen类和其方法来绘制一个简单的图形,并进行缩放变换:

代码语言:csharp
复制
using System;
using System.Drawing;
using System.Windows.Forms;

public class PenExample : Form
{
    public PenExample()
    {
        this.Text = "Pen Example";
        this.Size = new Size(400, 300);
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        Graphics graphics = e.Graphics;

        // 创建一个红色画笔,宽度为2个单位
        Pen myPen = new Pen(Color.Red, 2.0f);

        // 绘制一个矩形
        Rectangle rectangle = new Rectangle(50, 50, 200, 100);
        graphics.DrawRectangle(myPen, rectangle);

        // 使用ScaleTransform方法对画笔进行缩放变换
        myPen.ScaleTransform(1.5f, 0.5f);

        // 绘制一个缩放后的矩形
        Rectangle scaledRectangle = new Rectangle(250, 50, 200, 100);
        graphics.DrawRectangle(myPen, scaledRectangle);

        // 释放资源
        myPen.Dispose();
    }

    public static void Main()
    {
        Application.Run(new PenExample());
    }
}

这个示例创建了一个WinForms窗体,继承自Form类,并在窗体上绘制了两个矩形。第一个矩形使用红色画笔绘制,宽度为2个单位。然后,使用ScaleTransform方法对画笔进行缩放变换,使其在水平方向上放大1.5倍,垂直方向上缩小0.5倍,然后绘制了第二个矩形。


我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🚀前言
  • 🚀一、Pen
    • 🔎1.属性
      • 🔎2.构造函数
        • 🔎3.方法
          • 🔎4.案例
          相关产品与服务
          云开发 CloudBase
          云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档