Я хочу нарисовать текст с 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)
Линия рисуется с прозрачностью, примененной правильно, но текст черный без прозрачности.
Edit:
Если я устанавливаю сплошной цвет в качестве фона для объекта Graphics, тогда прозрачность текста работает, но мне нужно, чтобы он был действительно прозрачным в результирующем png-файле, а не только прозрачным на фоне сплошного цвета фона в изображении.
Эта проблема возникает также, если я установил частично прозрачный цвет в качестве фона, как это:
lGraphic.Clear(Color.FromArgb(100, 0, 255, 0))
Я думал, что, возможно, SolidBrush не поддерживает прозрачность, но я нашел предопределенную кисть с именем Transparent (Brushes.Transparent
), которая была SolidBrush
, когда я смотрел на нее в отладке. Я пытался использовать Brushes.Transparent
в качестве кисти при рисовании текста, и он вообще не показывался. Это означает, что я получаю полную прозрачность для работы, но не частичную прозрачность.