C# 在图像vb.net中添加文本

C# 在图像vb.net中添加文本,c#,vb.net,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)

我是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

您的代码存在许多问题。首先,您没有处理
图片盒中已有的
位图。其次,您没有处理为绘制文本而创建的
图形
对象。第三,虽然这不应该是一个大问题,但我想不出为什么您会认为先显示
位图,然后绘制文本是一个好主意

最后,也可能是您没有看到任何文本的原因,是您正在使用
PictureBox1.Location
指定在何处绘制文本。这是没有意义的,因为这意味着
PictureBox
距离表单左上角越远,文本距离
位图的左上角越远。您需要考虑在
位图上绘制文本的实际位置

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

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
请注意,该代码还使用系统提供的
画笔
,而不是不必要地创建一个也未处理的画笔

请注意,此行仅在VB 2017中可用:

PictureBox1.Image?.Dispose()
在早期版本中,您需要一个
If
语句:

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

文字对图像的影响如何?类似于在背景中有图像,在前景中有一些文本?你不是在刷新PictureBox。谢谢@jmcilhinney的作品很有魅力!!!谢谢你给我解释,它澄清了一切