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