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

时间:2010-03-15 12:53:25

标签: .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作为画笔,但它根本没有成功显示。这意味着我可以完全透明地工作,但不是部分透明。

2 个答案:

答案 0 :(得分:3)

TextRenderingHint设置为SingBitPerPixelSingleBitPerPixelGridFit

lGraphic.TextRenderingHint = Drawing.Text.TextRenderingHint.SingleBitPerPixel

答案 1 :(得分:0)

我多次成功地遵循本教程:

http://www.codeproject.com/KB/GDI-plus/watermark.aspx

希望它对你有所帮助,我不确定你对“32位透明度”的意思是什么,但我相信上面的链接告诉你如何在创建画笔时用alpha过滤器调整透明度等级:

SolidBrush semiTransBrush2 =     新的SolidBrush(Color.FromArgb(153,0,0,0));