问题描述
我用透明的背景色创建一个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();
}
屏幕输出: