将带有文本的图像保存为.png

问题描述 投票:0回答:2

我有一个带有图像的图片框,我将文本添加到图像中。 这很好用。 这是代码片段

 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()

text on image

问题是当我保存图片时,文本没有保存?? no text on image

任何人都可以指出向图像添加文本并保存带有文本的新图像的错误或正确方法吗??

vb.net picturebox
2个回答
0
投票

问题是您正在为

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
的副本。


0
投票

好吧,我没有完整的源码,所以我会假设 PicCropImage 是用户输入要更改的图像的表单控件。您所做的是获取该控件的图形对象而不是位图的。这就是为什么您会在屏幕上看到文本,但由于它不是位图的一部分,因此不会被保存。

尝试更换线路

Dim g As Graphics = PicCropImage.CreateGraphics

这个

Dim newGraphics As Graphics = Graphics.FromImage(PicCropImage.Image)
© www.soinside.com 2019 - 2024. All rights reserved.