如何使用C#绘制具有透明度值的文本?
我创建了一个具有透明背景色的from,并希望在窗体窗口上使用适当的透明度设置绘制“hello”字符串:如何使用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
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%(透明键)或整个窗体(不透明度)。当您将创建的位图保存到磁盘或覆盖到另一个位图上时,它具有所需的所有透明度和半透明度。。