在图像vb.net中添加文本

时间:2017-09-03 07:57:45

标签: c# vb.net

我是vb.net的新手,我想在图片上添加一些文字,但似乎我的代码根本不起作用。

Public Class Form1
  Dim Graph As Graphics
  Dim Drawbitmap As Bitmap
  Dim Brush As New Drawing.SolidBrush(Color.Black)
  Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As EventArgs)
      Drawbitmap = New Bitmap(PictureBox1.Width, PictureBox1.Height)
      Graph = Graphics.FromImage(Drawbitmap)
      PictureBox1.Image = Drawbitmap
      Graph.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
      Graph.DrawString(RichTextBox1.Text, RichTextBox1.Font, Brush, PictureBox1.Location)


  End Sub
End Class

1 个答案:

答案 0 :(得分:1)

您的代码存在许多问题。首先,您没有处置Bitmap中已有的PictureBox。其次,您没有处置您创建的Graphics对象来绘制文本。第三,虽然它不应该是一个主要问题,但我想不出为什么你认为首先显示Bitmap然后再绘制文本是个好主意。

最后,可能是您没有看到任何文字的原因是,您使用PictureBox1.Location来指定绘制文本的位置。这没有任何意义,因为这意味着PictureBox越远离表单的左上角,文本将越远离Bitmap的左上角。您需要考虑一下您希望在Bitmap上绘制文本的位置。

以下是一些经过测试的代码,可以解决所有这些问题:

Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged
    Dim img As New Bitmap(PictureBox1.Width, PictureBox1.Height)

    Using g = Graphics.FromImage(img)
        g.SmoothingMode = SmoothingMode.HighQuality
        g.DrawString(RichTextBox1.Text, RichTextBox1.Font, Brushes.Black, New PointF(10, 10))
    End Using

    'Dispose the existing image if there is one.'
    PictureBox1.Image?.Dispose()

    PictureBox1.Image = img
End Sub

请注意,该代码也使用系统提供的Brush,而不是不必要地创建一个也没有处理的代码。

请注意,此行仅适用于VB 2017:

PictureBox1.Image?.Dispose()

在早期版本中,您需要If声明:

If PictureBox1.Image IsNot Nothing Then
    PictureBox1.Image.Dispose()
End If