.net - 如何在图形对象上绘制半透明文本?

标签 .net vb.net graphics text transparency

我想在图形对象上绘制具有 32 位透明度的文本。当我尝试时,结果只得到黑色。

如果我尝试用相同的半透明颜色画一条线,它会完美地工作。

我有这个代码:

lBitmap As New Bitmap(32, 32, PixelFormat.Format32bppArgb)
lGraphic As Graphics = Graphics.FromImage(lBitmap)

lGraphic.SmoothingMode = SmoothingMode.HighQuality
lGraphic.InterpolationMode = InterpolationMode.HighQualityBicubic

lGraphic.Clear(Color.Transparent)

Dim lTestTransparencyColor As Color = Color.FromArgb(100, 140, 0, 230)
lGraphic.DrawLine(New Pen(lTestTransparencyColor), 0, 0, 32, 32)

lBrush As New SolidBrush(lTestTransparencyColor)
lGraphic.DrawString("A", New Font("Arial", 12), lBrush, 0, 0)

Dim lImage As Image = lBitmap
lImage.Save("D:\Test.png", Imaging.ImageFormat.Png)

线条是在正确应用透明度的情况下绘制的,但文本是黑色的,没有透明度。

编辑:
如果我在 Graphics 对象上将纯色设置为背景,则文本透明度有效,但我需要它在结果 png 文件中真正透明,而不仅仅是对图像中的纯色背景透明。 如果我像这样将部分透明颜色设置为背景,也会出现此问题:

lGraphic.Clear(Color.FromArgb(100, 0, 255, 0))

我在想可能是 SolidBrush 不支持透明度,但是我在查看时发现了一个名为 Transparent (Brushes.Transparent) 的预定义画笔,它是一个 SolidBrush在调试中。我尝试在绘制文本时使用 Brushes.Transparent 作为画笔,但它完全没有显示。这意味着我的工作完全透明,但不是部分透明。

最佳答案

设置TextRenderingHintSingBitPerPixelSingleBitPerPixelGridFit:

lGraphic.TextRenderingHint = Drawing.Text.TextRenderingHint.SingleBitPerPixel

关于.net - 如何在图形对象上绘制半透明文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2447180/

相关文章:

.net - 当他的 BaseStream 有 BOM 时,将 StreamReader 返回到开始

c# - MSACCESS DateTIme SQL 查询

vb.net 变量声明什么是最佳实践

graphics - 你如何确定俯视向量?

c# - 在 C# 中处理对象

c# - LINQ 到 XML : Ignoring of the case of attributes

.NET XML 无助于解析保存时的实体

ASP.NET:Ro​​slyn 页面更改速度缓慢

java - 如何重写Java中的fillOval函数?

c++ - 图形分析