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

如何使用C#绘制具有透明度值的文本?,c#,bitmap,C#,Bitmap,我创建了一个具有透明背景色的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 = Smo

我创建了一个具有透明背景色的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, 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, 20);
        bmp.MakeTransparent(Color.Black);

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

        e.Graphics.DrawImage(bmp, 0, 0);
        bmp.Dispose();
    }
屏幕上的输出:


无法再现“设置为3时,显示深黑色”,也无法再现“设置为254时,有点透明”。透明度对我来说是正确的。你能显示屏幕截图吗?你能提到你在表单初始化中为TransparencyKey指定的颜色吗组件:this.TransparencyKey=System.Drawing.color.Black;this.BackColor=System.Drawing.Color.Black;bmp.MakeTransparent(Color.Transparent);嗯?使透明像素透明?毫无意义。请注意,MakeTransparency和TransparencyKey仅适用于100%精确的颜色匹配。-另外:gamma校正值(文本对比度)必须介于0和12之间。默认值是4。-另外:D3~是一个相当亮的灰色。尝试一个较暗的阴影,较少的伽马!我试着:g.Clear(Color.Black);bmp.MakeTransparent(颜色:黑色);但一切都没有改变。屏幕上的文字仍然很暗(对TaW来说:背景是完全透明的。我的意思是桌面etc不会在文本中发光。它只会在表单中发光。不透明度<1。所有代码的其余部分都没有意义。什么时候可以使用位图笔刷不透明度属性?只要您愿意,除非尝试在表单中创建透明度,该属性仅支持1。)00%(透明键)或整个窗体(不透明度)。当您将创建的位图保存到磁盘或覆盖到另一个位图上时,它具有所需的所有透明度和半透明度。。