【问题标题】:Drawing a Gradient Circle into a PictureBox with VB.NET使用 VB.NET 将渐变圆绘制到 PictureBox 中
【发布时间】:2021-05-07 06:23:46
【问题描述】:

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

申请包括两个步骤:

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

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

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

我要绘制的圆的示例如下图所示。 我在下面附上了一张在PictureBox 上绘制的圆圈应该是什么样子的图片:

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

我该怎么做? System.Drawing 中是否有可以执行此操作的函数或我可以使用的 NuGet 包? (在 PictureBox 中已经存在的图像上绘制橙色圆形渐变圆?

【问题讨论】:

  • 你应该考虑使用PathGradientBrush

标签: .net vb.net graphics drawing


【解决方案1】:

这是一个示例,它在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 变量的方式,使其成为大小和位置正确的圆圈,并根据需要更改颜色。

编辑:应得的信用,我从this question 的答案之一中得到了基础。

【讨论】:

    猜你喜欢
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多