2017-09-03 142 views
1

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

文本?就像在后台有一些文字在前景中的图像? –

+0

你不刷新PictureBox。 – jAC

回答

1

您的代码有许多问题。首先,你不会处置已经在PictureBox中的Bitmap。其次,你不会配置你创建的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,而不是无谓地创建一个也没有配置。

注意,这条线将仅在2017年VB工作:

PictureBox1.Image?.Dispose() 

在早期版本中,你将需要一个If声明:在图像上如何

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

谢谢@jmcilhinney工作就像一个魅力!并感谢你向我解释它澄清了一切 –