button with backgroundimage and text
由于图像颜色的问题,文本不可读,我能想到的解决此问题以使文本可读的唯一方法是在按钮文本上添加文本轮廓,但是我不知道如何添加大纲
还是有人可以在将背景图像添加到按钮后提出其他好主意来解决文本的可读性问题?
最佳答案
正如其他人提到的那样,没有一个简单的属性可以将文本呈现为轮廓。您需要绘制文本或执行其他操作。
一种非常简单的方法是“空心”轮廓字体:
Dim bmp As New Bitmap("C:\Temp\BigHead_thumb1.jpg")
Dim txt = "I AM BIGHEAD"
Using g = Graphics.FromImage(bmp)
Using fnt = New Font("OutLined", 20)
Dim sz = g.MeasureString(txt, fnt)
Dim x = (bmp.Width - sz.Width) / 2
Dim y = (bmp.Height - sz.Height) - 10
g.DrawString(txt, fnt, Brushes.AntiqueWhite, x, y)
pb1.Image = bmp
End Using
End Using
结果:
我不认为结果会那么好。如果要使文本突出显示,则让图像显示文本的各个部分并不能很好地达到该目的。图像越小,效果越差。
如果您必须寻找轮廓样式的字体,可以考虑从某个地方购买/许可。许多免费软件只是看起来不正确。
要使其更加突出,可以在文本后面使用黑色阴影。它有点粗糙,但是可以最大程度地提高可读性,尤其是在图像很小的情况下:
Using g = Graphics.FromImage(bmp)
Using fnt = New Font("VERDANA", 18)
Dim sz = g.MeasureString(txt, fnt).ToSize()
Dim x = (bmp.Width - sz.Width) \ 2
Dim y = (bmp.Height - sz.Height) - 10
Dim r = New Rectangle(x, y, sz.Width + 8, sz.Height + 2)
g.FillRectangle(Brushes.Black, r)
g.DrawString(txt, fnt, Brushes.AntiqueWhite, r)
pb1.Image = bmp
End Using
End Using
结果:
在这两个极端之间,可以使用
GraphicsPath
绘制文本的超大图像作为后部,然后在该文本上使用不同的颜色。Using g = Graphics.FromImage(bmp)
Using fnt = New Font("VERDANA", 18)
Dim sz = g.MeasureString(txt, fnt).ToSize()
Dim x = (bmp.Width - sz.Width) \ 2
Dim y = (bmp.Height - sz.Height) - 10
Using gp As New GraphicsPath,
br As New SolidBrush(Color.DimGray),
p As New Pen(Color.WhiteSmoke, 6)
gp.AddString(" " & txt, fnt.FontFamily, 1,
22, New Point(x, y),
StringFormat.GenericTypographic)
g.DrawPath(p, gp)
g.FillPath(br, gp)
End Using
End Using
End Using
pb1.Image = bmp
它涉及更多,但结果相当不错:
左图使用上面的代码。中心图像使用两种颜色的
WhiteSmoke
,外部Pen
颜色使用较低的Alpha值,从而使外观更柔和。右侧的笔使用一种接近黑色的颜色作为笔的一种黑色效果。最好使用更多的计算变量。例如,轮廓线应为22,而不是22,而是基于字体大小(如+ 25%),因此结果将根据所使用的字体大小进行缩放。
关于.net - 如何在button.text中添加文本轮廓?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40310546/