如何使用C#绘制具有透明度值的文本?

问题描述

我用透明的背景色创建一个from,我想在窗体窗口上使用适当的透明度设置绘制“ hello”字符串:

private void Form1_Paint(object sender,PaintEventArgs e)
{
    Bitmap bmp = new Bitmap(150,50);
    Graphics g = Graphics.FromImage(bmp);
    g.Clear(Color.Transparent);

    g.SmoothingMode = SmoothingMode.AntiAlias;
    g.InterpolationMode = InterpolationMode.HighQualityBicubic;
    g.CompositingQuality = CompositingQuality.GammaCorrected;
    g.CompositingMode = CompositingMode.sourceOver;
    g.TextRenderingHint = TextRenderingHint.SingleBitPerPixel;

    g.TextContrast = 10;

    Font font = new Font("",20,FontStyle.Bold);
    Color color = ColorTranslator.FromHtml("#D3D3D3");
    int opacity = 180;
    SolidBrush brush = new SolidBrush(Color.FromArgb(opacity,color));
    g.DrawString("hello",font,brush,10,10);
    g.Save();
    g.dispose();

    bmp.MakeTransparent(Color.Transparent);

    e.Graphics.DrawImage(bmp,0);
    bmp.dispose();
}

当我将不透明度设置为1或2时,图像文本消失,当设置为3时,显示深黑色,当设置为254时,透明一些。我的代码有什么问题吗?

解决方法

我将代码更新为:

    private void Form1_Paint(object sender,PaintEventArgs e)
    {
        Bitmap bmp = new Bitmap(200,200);
        Graphics g = Graphics.FromImage(bmp);
        g.Clear(Color.Black);
       
        g.SmoothingMode = SmoothingMode.HighQuality;
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.CompositingQuality = CompositingQuality.GammaCorrected;
        g.CompositingMode = CompositingMode.SourceOver;
        g.TextRenderingHint = TextRenderingHint.SingleBitPerPixel;

        g.TextContrast = 3;

        Font font = new Font("",20,FontStyle.Bold);
        Color color = ColorTranslator.FromHtml("#191970");
        int opacity = 20;
        SolidBrush brush = new SolidBrush(Color.FromArgb(opacity,color));

        g.DrawString("hello",font,brush,20);
        bmp.MakeTransparent(Color.Black);

        g.Save();
        g.Dispose();

        e.Graphics.DrawImage(bmp,0);
        bmp.Dispose();
    }

屏幕输出:

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...