如何根据字符串的大小自动调整图像的大小?

How to auto-size an Image based on the size of a string?

有没有办法根据字符串的宽度自动填充矩形?
目前,我正在根据字符串手动设置矩形的大小和点。

Public Class test
    Public Sub New()
        InitializeComponent()
        NavButton3.Glyph = ImgNotif(NavButton3.Glyph, "99") ' My image size is 32 x 32
    End Sub

    Private Function ImgNotif(srcImg As Image, num As String) As Image
        Dim bmp As New Bitmap(srcImg)
        Dim rect As New Rectangle(16, 16, 16, 16)
        Using g As Graphics = Graphics.FromImage(bmp)
            g.FillRectangle(Brushes.OrangeRed, rect)
            g.DrawString(num, Me.Font, Brushes.White, New Point(16, 16))
        End Using
        Return bmp
    End Function
End Class

您可以修改 ImgNotif() 方法以包含字符串的度量。
Graphics.MeasureString() 是直接可用的工具,因为您已经拥有从图像派生的图形上下文。

TextRederer.MeasureText()也可用于执行此任务。

StringFormat 用于设置一些格式选项:对齐、文本换行和裁剪等(请参阅文档)。

此处,文本以图像为中心。

Private Function ImgNotif(sourceImage As Image, imageText As String) As Image
    Dim bmp As New Bitmap(sourceImage)
    Using g As Graphics = Graphics.FromImage(bmp)
        Dim format As StringFormat = New StringFormat(StringFormatFlags.NoWrap)
        format.Alignment = StringAlignment.Center
        format.LineAlignment = StringAlignment.Center
        Dim TextSize As SizeF = g.MeasureString(imageText, Me.Font, sourceImage.Size, format)
        Dim TextLocation As PointF = New PointF((sourceImage.Width - TextSize.Width) / 2 + 1, (sourceImage.Height - TextSize.Height) / 2 + 1)
        Dim rect As New RectangleF(TextLocation, TextSize)
        rect.Inflate(0, 1)
        g.FillRectangle(Brushes.OrangeRed, rect)
        g.DrawString(imageText, Me.Font, Brushes.White, rect, format)
    End Using
    Return bmp
End Function