You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向PictureBox图像添加文字后保存无文字问题排查与解决

问题分析与解决方法

代码错误点

  • 错误1:使用控件界面绘制而非修改图像对象
    你通过PicCropImage.CreateGraphics()获取的Graphics是直接绘制在控件的显示层,并未修改PictureBox的Image对象本身。保存时调用PicCropImage.Image,取到的还是最初加载的无文字原始图像。
  • 错误2:图像绘制位置错误
    g.DrawImage(MyImg, MyImg.Width, MyImg.Height)把原图绘制到了控件可视区域之外的位置(坐标等于图像宽高,相当于控件右上角外侧),等于没把原图纳入当前绘制内容。
  • 错误3:保存对象未指向修改后的内容
    最后Dim bmpImage As New Bitmap(PicCropImage.Image)复制的是PictureBox的原始图像,不是你绘制文字后的内容。

正确实现代码

' 从PictureBox获取原始图像,创建可编辑的Bitmap副本
Dim MyImg As New Bitmap(PicCropImage.Image)
' 创建基于该Bitmap的Graphics,所有绘制操作直接修改MyImg
Using g As Graphics = Graphics.FromImage(MyImg)
    ' 设置高质量绘制参数
    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
    
    ' 绘制文字到图像上,用原图尺寸作为绘制区域
    Dim drawRect As New Rectangle(0, 0, MyImg.Width, MyImg.Height)
    g.DrawString(TxtPhotoCaption.Text, FNT, New SolidBrush(CboPhotoCaptionColor.Color), drawRect, format)
End Using

' 更新PictureBox显示,确保界面和修改后的图像一致
PicCropImage.Image = MyImg
' 直接保存修改后的Bitmap
MyImg.Save("C:\Users\<username>\Desktop\test8.png", Imaging.ImageFormat.Png)

' 释放资源
MyImg.Dispose()

关键说明

  • 所有绘制操作基于原始图像的Bitmap副本,修改直接作用于图像文件本身,而非控件界面。
  • 通过PicCropImage.Image = MyImg更新控件显示,保证界面和保存的图像内容一致。
  • 用Using语句自动释放Graphics对象,避免内存泄漏。

内容的提问来源于stack exchange,提问作者Robert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 18:45:10