.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
你在那里绘制的
图形
对象有一个测量
方法。这正是我需要的。谢谢