我想在圖形對象上繪製一個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