awe*_*awe 4 .net vb.net graphics transparency text
我想在图形对象上绘制 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)
Run Code Online (Sandbox Code Playgroud)
线条是在正确应用透明度的情况下绘制的,但文本是黑色的,没有透明度。
编辑:
如果我将纯色设置为 Graphics 对象上的背景,则文本透明度有效,但我需要它在结果 png 文件中真正透明,而不仅仅是对图像中的纯色背景色透明。如果我将部分透明颜色设置为背景,也会出现此问题,如下所示:
lGraphic.Clear(Color.FromArgb(100, 0, 255, 0))
Run Code Online (Sandbox Code Playgroud)
我想可能是SolidBrush不支持透明度,但我发现一个名为Transparent()的预定义画笔,当我在调试中查看它时,它Brushes.Transparent是一个。SolidBrush我尝试Brushes.Transparent在绘制文本时使用画笔,但成功地根本不显示。这意味着我的工作完全透明,但不是部分透明。
将设为TextRenderingHint或SingBitPerPixel:SingleBitPerPixelGridFit
lGraphic.TextRenderingHint = Drawing.Text.TextRenderingHint.SingleBitPerPixel
Run Code Online (Sandbox Code Playgroud)