c#中Graphics常用的属性

Graphics介绍

在C#中,Graphics 类是 System.Drawing 命名空间的一部分,它提供了用于绘制线条、形状和图像的方法。Graphics 对象通常与 Graphics 类的 FromImage、FromHdc、FromHwnd 等方法一起使用,以获取用于绘制的 Graphics 对象。以下是一些 Graphics 类中常用的属性和方法:

  1. Clip :获取或设置用于限定绘制区域的 Region 对象。

  2. CompositingMode:获取或设置绘图的合成模式。

  3. CompositingQuality:获取或设置绘图的合成质量。

  4. InterpolationMode:获取或设置插值模式,影响图像缩放时的图像质量。

  5. PageScale:获取或设置绘图时的缩放比例。

  6. PageUnit:获取或设置绘图时使用的单位。

  7. PixelOffsetMode:获取或设置像素偏移模式,影响绘制文本和线条时的像素对齐方式。

  8. RenderingOrigin:获取或设置绘图原点的位置。

  9. SmoothingMode:获取或设置绘图时的平滑模式,用于控制抗锯齿。

  10. TextRenderingHint:获取或设置文本渲染的提示,影响文本的渲染质量。

  11. Transform :获取或设置 Graphics 对象的变换矩阵,用于执行平移、缩放、旋转等变换。

除了这些属性,Graphics 类还提供了许多绘制方法,如:

  • DrawLine:绘制一条直线。

  • DrawLines:绘制多条直线。

  • DrawCurve:绘制一条曲线。

  • DrawRectangle:绘制一个矩形。

  • DrawEllipse:绘制一个椭圆。

  • DrawPolygon:绘制一个多边形。

  • DrawPath:绘制一个路径。

  • DrawString:绘制文本字符串。

  • FillRectangle:用指定的画笔填充矩形。

  • FillEllipse:用指定的画笔填充椭圆。

  • FillPolygon:用指定的画笔填充多边形。

  • FillPath:用指定的画笔填充路径。

  • MeasureString:测量文本字符串的尺寸。

使用 Graphics 类时,通常需要处理 Graphics 对象的生命周期,包括创建、使用和释放。例如,当在窗体或控件上绘制时,可以在 Paint 事件处理器中获取 Graphics 对象,并在绘制完成后释放它。

Graphics具体使用方法

在C#中,Graphics 类的属性和方法用于在图像、窗口、打印机等表面上进行绘制。以下是一些常用 Graphics 属性和方法的具体使用方法:

属性

  1. Clip:

    cs 复制代码
    using System.Drawing;
    using System.Drawing.Drawing2D;
    ​
    Graphics g = ...;
    Region clipRegion = new Region(0, 0, 100, 100); // 定义一个矩形区域
    g.Clip = clipRegion;
  2. CompositingMode:

    cs 复制代码
    g.CompositingMode = CompositingMode.SourceOver; // 设置合成模式为源覆盖
  3. CompositingQuality:

    cs 复制代码
    g.CompositingQuality = CompositingQuality.HighQuality; // 设置合成质量为高质量
  4. InterpolationMode:

    cs 复制代码
    g.InterpolationMode = InterpolationMode.HighQualityBicubic; // 设置插值模式为高质量双三次插值
  5. PageScale:

    cs 复制代码
    g.PageScale = 2.0f; // 设置缩放比例为2
  6. PageUnit:

    cs 复制代码
    g.PageUnit = GraphicsUnit.Pixel; // 设置绘图单位为像素
  7. PixelOffsetMode:

    cs 复制代码
    g.PixelOffsetMode = PixelOffsetMode.HighQuality; // 设置像素偏移模式为高质量
  8. RenderingOrigin:

    cs 复制代码
    g.RenderingOrigin = new Point(10, 10); // 设置绘图原点偏移
  9. SmoothingMode:

    cs 复制代码
    g.SmoothingMode = SmoothingMode.AntiAlias; // 设置平滑模式为抗锯齿
  10. TextRenderingHint:

    cs 复制代码
    g.TextRenderingHint = TextRenderingHint.AntiAlias; // 设置文本渲染提示为抗锯齿
  11. Transform:

    cs 复制代码
    g.Transform = new Matrix(); // 获取或设置变换矩阵

方法

  1. DrawLine:

    cs 复制代码
    Pen pen = new Pen(Color.Black);
    g.DrawLine(pen, 0, 0, 100, 100); // 绘制从(0,0)到(100,100)的直线
  2. DrawLines:

    cs 复制代码
    Pen pen = new Pen(Color.Black);
    Point[] points = { new Point(0, 0), new Point(100, 100), new Point(200, 200) };
    g.DrawLines(pen, points); // 绘制多条线段
  3. DrawCurve:

    cs 复制代码
    Pen pen = new Pen(Color.Black);
    Point[] points = { new Point(0, 0), new Point(100, 100), new Point(200, 0) };
    g.DrawCurve(pen, points); // 绘制一条曲线
  4. DrawRectangle:

    cs 复制代码
    Pen pen = new Pen(Color.Black);
    g.DrawRectangle(pen, 0, 0, 100, 100); // 绘制一个矩形
  5. DrawEllipse:

    cs 复制代码
    Pen pen = new Pen(Color.Black);
    g.DrawEllipse(pen, 0, 0, 100, 100); // 绘制一个椭圆
  6. DrawPolygon:

    cs 复制代码
    Pen pen = new Pen(Color.Black);
    Point[] points = { new Point(0, 0), new Point(100, 0), new Point(50, 100) };
    g.DrawPolygon(pen, points); // 绘制一个多边形
  7. DrawPath:

    cs 复制代码
    Pen pen = new Pen(Color.Black);
    GraphicsPath path = new GraphicsPath();
    path.AddEllipse(0, 0, 100, 100);
    g.DrawPath(pen, path); // 绘制一个路径
  8. DrawString:

    cs 复制代码
    using (Font font = new Font("Arial", 12))
    {
        Brush brush = new SolidBrush(Color.Black);
        g.DrawString("Hello, World!", font, brush, 10, 10); // 绘制文本
    }
  9. FillRectangle:

    cs 复制代码
    Brush brush = new SolidBrush(Color.Blue);
    g.FillRectangle(brush, 0, 0, 100, 100); // 填充一个矩形
  10. FillEllipse:

    cs 复制代码
    Brush brush = new SolidBrush(Color.Blue);
    g.FillEllipse(brush, 0, 0, 100, 100); // 填充一个椭圆
  11. FillPolygon:

    cs 复制代码
    Brush brush = new SolidBrush(Color.Blue);
    Point[] points = { new Point(0, 0), new Point(100, 0), new Point(50, 100) };
    g.FillPolygon(brush, points); // 填充一个多边形
  12. FillPath:

    cs 复制代码
    Brush brush = new SolidBrush(Color.Blue);
    GraphicsPath path = new GraphicsPath();
    path.AddEllipse(0, 0, 100, 100);
    g.FillPath(brush, path); // 填充一个路径
  13. MeasureString:

    cs 复制代码
    using (Font font = new Font("Arial", 12))
    {
        SizeF size = g.MeasureString("Hello, World!", font);
        Console.WriteLine($"Width: {size.Width}, Height: {size.Height}"); // 测量文本尺寸
    }

在使用 Graphics 对象时,通常在 Paint 事件中获取 Graphics 对象,例如在 Windows Forms 应用程序中:

cs 复制代码
private void MyControl_Paint(object sender, PaintEventArgs e)
{
    Graphics g = e.Graphics;
    // 使用 g 对象进行绘制
}

请确保在使用完 Graphics 对象后正确地释放资源,例如通过调用 Dispose 方法。

相关推荐
samble11 小时前
从零搭建灌装监控系统(十九):单元测试实战,xUnit + 内存SQLite + 反射测试私有方法
c#·wpf·mvvm·modbus·工业控制
人道领域14 小时前
【面试八股速通篇01】锁与并发工具
java·开发语言·面试·c#
宇卿.14 小时前
C#字段、属性、索引器、常量
开发语言·计算机视觉·c#
程序员Linc15 小时前
ONNXOCRSharp 开源手记 02|v0.4.0 PDF识别
开发语言·pdf·c#·ocr·onnxocrsharp
慧都小妮子15 小时前
MSG 附件太占内存?Aspose.Email for .NET 26.9 延迟加载
c#·.net·aspose·内存优化·延迟加载·aspose.email·附件内存
慧都小妮子16 小时前
FastReport PDF/UA 导出:让出海 PDF 满足无障碍合规要求
pdf·c#·fastreport·报表导出·pdf/ua·pdf 无障碍
淡海水19 小时前
03-02-架构篇-Boehm GC架构解析
unity·架构·c#·gc·boehm
samble2 天前
从零搭建灌装监控系统(十八):自定义控件,三色灯与状态指示
c#·wpf·mvvm·modbus·工业控制
jun_bai2 天前
使用Aspose实现word文档合并,内容替换
windows·c#·word
字节暗面2 天前
客户端上报不可信:游戏服务端数据校验与对局重演设计
c#·游戏开发·服务端校验·反作弊