我有一个带有图像的图片框,我将文本添加到图像中。 这很好用。 这是代码片段
Dim MyImg As New Bitmap(PicCropImage.Image)
Dim MyRect As New Rectangle(0, 0, PicCropImage.Width, PicCropImage.Height)
PicCropImage.BackColor = Color.White
Dim g As Graphics = PicCropImage.CreateGraphics
Using g
g.SmoothingMode = SmoothingMode.HighQuality
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias
g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
g.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
g.DrawString(TxtPhotoCaption.Text, FNT, New SolidBrush(CboPhotoCaptionColor.Color), MyRect, format)
g.DrawImage(MyImg, MyImg.Width, MyImg.Height)
End Using
Dim bmpImage As New Bitmap(PicCropImage.Image)
bmpImage.Save("C:\Users\<username>\Desktop\test8.png", Imaging.ImageFormat.Png)
bmpImage.Dispose()
MyImg.Dispose()
任何人都可以指出向图像添加文本并保存带有文本的新图像的错误或正确方法吗??
问题是您正在为
Graphics
本身创建 PictureBox
对象,而不是 Image
中的 PictureBox
。这就像你在相框的玻璃后面放了一张照片,你在玻璃上写字,然后想知道为什么照片上没有任何文字。你应该使用这样的代码:
Using img As New Bitmap(PicCropImage.Image)
Using g = Graphics.FromImage(img)
'Use g here.
End Using
img.Save("C:\Users\<username>\Desktop\test8.png", Imaging.ImageFormat.Png)
End Using
永远不要打电话给
CreateGraphics
。如果您发现自己这样做,从统计学上讲,您做错事的可能性为 100%。
请注意,如果您想在
Image
中绘制PictureBox
的副本。
好吧,我没有完整的源码,所以我会假设 PicCropImage 是用户输入要更改的图像的表单控件。您所做的是获取该控件的图形对象而不是位图的。这就是为什么您会在屏幕上看到文本,但由于它不是位图的一部分,因此不会被保存。
尝试更换线路
Dim g As Graphics = PicCropImage.CreateGraphics
这个
Dim newGraphics As Graphics = Graphics.FromImage(PicCropImage.Image)