visualbasic.net中的gdi+图形

GDI+是在VisualBasic.NET中绘制形状、字体、图像或任何图形的方法。...

GDI+是在VisualBasic.NET中绘制形状、字体、图像或任何图形的方法。

Reflection of female hacker coding working hackathon at laptop Reflection of female hacker coding working hackathon at laptop

本文是在VisualBasic.NET中使用GDI+的完整介绍的第一部分。

GDI+是.NET不寻常的一部分。它是在.NET(GDI+与Windows XP一起发布)之前出现的,它与.NET Framework不共享相同的更新周期。微软的文档通常说明微软Windows GDI+是一个API,用于C/C++程序员进入Windows操作系统。但是GDI+还包括VB.NET中用于基于软件的图形编程的名称空间。

wpf

但它并不是微软提供的唯一一款图形软件,尤其是自从Framework3.0以来。当Vista和3.0推出时,全新的WPF也随之推出。WPF是一种高级的、硬件加速的图形处理方法。正如微软WPF软件团队成员蒂姆·卡希尔(Tim Cahill)所说,WPF“你用高级构造描述你的场景,我们会担心其他的。”而且它是硬件加速的,这意味着你不必拖拽你的PC处理器在屏幕上绘制形状的操作。大部分实际工作都是由图形卡完成的。

然而,我们以前来过这里。每一次“大跃进”通常都伴随着一些倒退,此外,WPF需要几年的时间才能完成无数字节的GDI+代码。这一点尤其正确,因为WPF假设您使用的是一个高性能系统,该系统具有大量内存和热图形卡。这就是为什么许多PC在Vista首次推出时无法运行Vista(或者至少不能使用Vista“Aero”图形)。因此,本系列将继续在网站上提供给所有需要继续使用它的人。

好的ol代码

GDI+不像VB.NET中的其他组件那样可以拖到窗体上。相反,GDI+对象通常必须以旧的方式添加——从头开始编码!(尽管如此,VB.NET确实包含了许多非常方便的代码片段,它们确实可以帮助您。)

要编写GDI+,可以使用许多.NET名称空间中的对象及其成员。(目前,这些实际上只是Windows操作系统对象的包装代码,这些对象实际上完成了这项工作。)

名称空间

GDI+中的名称空间是:

系统图

这是核心GDI+名称空间。它定义了用于基本渲染的对象(字体、笔、基本画笔等)和最重要的对象:图形。我们将在几段中看到更多这方面的内容。

System.Drawing.Drawing2D

这为您提供了更高级的二维矢量图形对象。其中一些是渐变笔刷、笔帽和几何变换。

系统、绘图、成像

如果您想更改图形图像(即更改调色板、提取图像元数据、操作图元文件等),这就是您需要的。

系统、绘图、打印

要将图像呈现到打印页面、与打印机本身交互以及格式化打印作业的整体外观,请使用此处的对象。

System.Drawing.Text

可以将字体集合与此命名空间一起使用。

图形对象

GDI+的起点是图形对象。虽然您绘制的内容显示在监视器或打印机上,但图形对象是您绘制的“画布”。

但是图形对象也是使用GDI+时引起混淆的首要原因之一。图形对象始终与特定的设备上下文关联。因此,几乎所有GDI+的新生都会遇到的第一个问题是,“如何获得图形对象?”

基本上有两种方式:

  1. 可以将传递给OnPaint事件的e事件参数与PaintEventArgs对象一起使用。几个事件传递PaintEventArgs,您可以使用引用设备上下文已经使用的图形对象。
  2. 可以使用设备上下文的CreateGraphics方法创建图形对象。

以下是第一种方法的示例:

Protected Overrides Sub OnPaint( _ ByVal e As System.Windows.Forms.PaintEventArgs) Dim g As Graphics = e.Graphics g.DrawString("About Visual Basic" & vbCrLf _ & "and GDI+" & vbCrLf & "A Great Team", _ New Font("Times New Roman", 20), _ Brushes.Firebrick, 0, 0) MyBase.OnPaint(e) End Sub

单击此处显示图示

将其添加到标准Windows应用程序的Form1类中,以便自己编写代码。

在本例中,已经为表单Form1创建了图形对象。代码所要做的就是创建该对象的本地实例,并使用它在同一窗体上绘制。请注意,您的代码重写了OnPaint方法。这就是为什么MyBase.OnPaint(e)在最后执行的原因。您需要确保,如果基础对象(您要覆盖的对象)正在执行其他操作,它就有机会这样做。通常情况下,您的代码没有这个功能,但这是一个好主意。

painteventargs

还可以使用表单的OnPaint和OnPaintBackground方法中传递给代码的PaintEventArgs对象获取图形对象。在PrintPage事件中传递的PrintPageEventArgs将包含用于打印的图形对象。甚至可以为某些图像获取图形对象。这可以让您在图像上正确绘制,就像在窗体或组件上绘制一样。

事件处理程序

方法一的另一个变体是为表单的Paint事件添加事件处理程序。下面是该代码的外观:

Private Sub Form1_Paint( _ ByVal sender As Object, _ ByVal e As System.Windows.Forms.PaintEventArgs) _ Handles Me.Paint Dim g As Graphics = e.Graphics g.DrawString("About Visual Basic" & vbCrLf _ & "and GDI+" & vbCrLf & "A Great Team", _ New Font("Times New Roman", 20), _ Brushes.Firebrick, 0, 0) End Sub

创建图形

为代码获取图形对象的第二种方法使用CreateGraphics方法,该方法可用于许多组件。代码如下所示:

Private Sub Button1_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click Dim g = Me.CreateGraphics g.DrawString("About Visual Basic" & vbCrLf _ & "and GDI+" & vbCrLf & "A Great Team", _ New Font("Times New Roman", 20), _ Brushes.Firebrick, 0, 0) End Sub

这里有几个不同之处。这是在Button1.Click事件中,因为当Form1在Load事件中重新绘制自身时,图形将丢失。因此,我们必须在以后的活动中添加它们。如果您编写此代码,您会注意到,当必须重新绘制Form1时,图形将丢失。(再次进行最小化和最大化以了解这一点。)这是使用第一种方法的一大优势。

大多数参考文献建议使用第一种方法,因为图形将自动重新绘制。GDI+可能很棘手!

  • 发表于 2021-10-21 00:24
  • 阅读 ( 322 )
  • 分类:编程

你可能感兴趣的文章

如何在树莓皮上用retropie玩dreamcast游戏

...运行Recalbox。然而,它确实在RetroArch下运行,RetroPie是其中的一个叉子。 ...

  • 发布于 2021-03-25 01:32
  • 阅读 ( 239 )

如何使windows在高dpi显示器上更好地工作并修复模糊字体

...将以更智能的方式扩展应用程序。此选项将导致应用程序中的清晰文本和一些其他元素在正常系统缩放时通常显得模糊。在Creators更新中,这只适用于基于GDI的应用程序。这个新特性就是为什么设备管理器和其他系统工具最终在...

  • 发布于 2021-04-07 23:10
  • 阅读 ( 195 )

如何解决vlc播放高清视频文件时的跳转和滞后问题

...窗口底部“显示设置”选项下的“全部”。单击左侧边栏中的“输入/编解码器”。 如果跳过的文件是从本地硬盘播放的,请在右侧的“高级”下查找“文件缓存(ms)”选项。此处的缓存值以毫秒为单位设置,因此将该值设置...

  • 发布于 2021-04-09 05:45
  • 阅读 ( 278 )

windows任务管理器的最佳免费替代方案

...运行进程的信息。可以使用“视图”菜单将Process Explorer中的显示拆分为两个窗格。顶部窗格显示当前活动进程的列表,底部窗格显示有关顶部窗格中所选进程的不同信息,具体取决于在“视图”菜单中为底部窗格选择的模式。...

  • 发布于 2021-04-12 04:47
  • 阅读 ( 205 )

从提示框:个人密码算法,windows下的linux/mac字体渲染,android的audiomanager

...将讨论如何使用个人算法轻松生成安全密码,升级Windows中的字体渲染,以及如何更有效地管理Android卷。 使用个人算法生成安全密码 帕特写了以下关于使用个人算法生成安全但易于记忆的密码的提示: For ages I have watched people...

  • 发布于 2021-04-12 20:44
  • 阅读 ( 238 )

在vista下使用vlc播放器

...owing opti*** ( If one fails, try the other ) DirectX Video OutPut Windows GDI Video OutPut (I had best luck with this) 请注意,默认值通常是最好的选择,因此只有在遇到问题时才可以更改。 7) 如果这些失败,您可以尝试虚拟视频输出功能,甚至其他...

  • 发布于 2021-04-14 14:32
  • 阅读 ( 108 )

微软推出更多windows10创建者更新功能

...它充满了新的功能和变化。首先添加的一个是MicrosoftEdge中的一个新选项卡预览栏,它可以让您在不离开当前页面的情况下直观地浏览其余选项卡。微软还增加了保存和恢复选项卡集的功能,因此,如果关闭或重新启动所有选项...

  • 发布于 2021-05-09 09:53
  • 阅读 ( 200 )

图形处理器(gpu)和图形卡(graphic card)的区别

...卡的主要任务是在显示单元上显示图像。GPU是位于图形卡中的一个单元。它执行与图形相关的实际计算。它处理高分辨率的图形处理任务,由多个内核和小指令集组成。GPU减少了主处理器的工作负载。 覆盖的关键领域 1.什么是CP...

  • 发布于 2021-07-01 01:27
  • 阅读 ( 652 )

visual basic语言(visual basic)和Visual C++(visual c++)的区别

...面向对象的编程语言,Visual C++是集成开发环境(IDE)。 visualbasic是微软开发的一种用户友好的编程语言。在visualbasic.NET发布之前,它的最终版本是visualbasic6.0。另一方面,Visual C++是专门设计和编写C++程序的IDE。Visual C++是VisualStud...

  • 发布于 2021-07-01 09:31
  • 阅读 ( 373 )

按值调用(call by value)和编程中的引用调用(call by reference in programming)的区别

...要小心。 违约 大多数编程语言中的缺省,如C++、PHP、VisualBasic、Net、C语言和realbasic公司 大多数编程语言都支持,但不是默认的。  

  • 发布于 2021-07-12 18:35
  • 阅读 ( 228 )
RONG117
RONG117

0 篇文章

相关推荐