我想在图形对象上绘制一个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)
绘制直线与正确应用的透明度,但文字是黑色的,没有透明度。
编辑:
如果我定了坚实的颜色作为图形背景对象,则文本透明度的工作,但我需要它在结果真正透明的PNG文件,而不仅仅是对一个坚实的背景透明图像中的颜色。
lGraphic.Clear(Color.FromArgb(100, 0, 255, 0))
我想这可能是因为SolidBrush不支持透明度,但我发现的预定义刷名为透明(Brushes.Transparent
),这是:如果我设置一个局部透明的颜色作为背景这样也会发生 此问题一个SolidBrush
当我在调试中看到它。在绘制文字时,我尝试使用Brushes.Transparent
作为画笔,并且它完全没有显示出来。这意味着我的工作完全透明,但不是部分透明。
非常感谢让我意识到这个设置!我用'TextRenderingHint.AntiAlias'代替。然后我用半透明抗锯齿得到完美的结果! – awe 2010-03-15 14:09:33