【问题标题】:How to auto-size an Image based on the size of a string?如何根据字符串的大小自动调整图像大小?
【发布时间】:2018-11-01 21:48:09
【问题描述】:

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

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

【问题讨论】:

  • 您用来在那里绘制的Graphics 对象有一个MeasureString 方法。

标签: .net vb.net winforms bitmap gdi+


【解决方案1】:

您可以修改 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

【讨论】:

  • 正是我需要的。谢谢!
猜你喜欢
  • 2022-07-04
  • 2013-11-25
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 2014-10-20
  • 2018-01-25
  • 2012-08-07
  • 1970-01-01
相关资源
最近更新 更多