首页 > 解决方案 > 使用 VB.NET 将渐变圆绘制到 PictureBox 中

问题描述

我有一个将图像放入 aPictureBox并在其中绘制一个圆圈的应用程序。

该应用程序包括两个步骤:

  1. 图像被加载到PictureBox
  2. 使用PictureBox给定的半径/直径(以像素为单位)规格和圆心的位置以及X, Y图片在PictureBox. (例如,如果给定的坐标是44,44,那么圆的中心将在44,44.

我的目标是使用最有效的方法将橙色渐变圆(见下图)绘制到已经在 a 中的图像中PictureBox,并将其覆盖。最好,我想要一种不将图像保存到计算机的方法,因为盒子内的图像每秒都会上传一次。

另外,我正在考虑使用System.Drawing直接在picturebox 中存在的图片中绘制一个圆圈,但它看起来不是最好的(圆圈是颗粒状和像素化的),并且没有适合我的渐变选项。

下图中显示了我要绘制的圆的示例。我在下面附上了一张画出的圆圈PictureBox应该是什么样子的图片: 比较

我的想法是直接将这个圆圈画到图中,PictureBox而不必将图片保存到 PC 中,因为图中的这张图片PictureBox每秒都会更新一次,而且效率不高。

我怎样才能做到这一点?是否有System.Drawing可以执行此操作的功能或我可以使用的 NuGet 包?(在已经存在于PictureBox?

标签: .netvb.netgraphicsdrawing

解决方案


这是一个绘制橙色椭圆的示例,该椭圆在 a 内从中心透明到边缘不透明PictureBox

Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
    Dim bounds = PictureBox1.Bounds

    Using path As New GraphicsPath
        path.AddEllipse(bounds)

        Using brush As New PathGradientBrush(path)
            brush.CenterPoint = New PointF(bounds.Width / 2.0F, bounds.Height / 2.0F)
            brush.CenterColor = Color.FromArgb(0, Color.Orange)
            brush.SurroundColors = {Color.Orange}
            brush.FocusScales = PointF.Empty

            e.Graphics.FillRectangle(brush, bounds)
        End Using
    End Using
End Sub

您可以更改设置bounds变量的方式,使其成为正确大小和位置的圆圈,并在需要时更改颜色。

编辑:应得的信用,我从这个问题的一个答案中得到了基础。


推荐阅读