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

.net 如何根据字符串大小自动调整图像大小?,.net,vb.net,winforms,bitmap,gdi+,.net,Vb.net,Winforms,Bitmap,Gdi+,有没有办法根据字符串的宽度自动填充矩形? 目前,我正在根据字符串手动设置矩形的大小和点 Public Class test Public Sub New() InitializeComponent() NavButton3.Glyph = ImgNotif(NavButton3.Glyph, "99") ' My image size is 32 x 32 End Sub Private Function ImgNot

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

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()
方法以包含字符串的度量值。
是直接可用的工具,因为您已经拥有从图像派生的图形上下文

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
也可用于执行此任务

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

在这里,文本以图像为中心

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

你在那里绘制的
图形
对象有一个
测量
方法。这正是我需要的。谢谢