C# 标签周围的绿色像素';s文本
我将C# 标签周围的绿色像素';s文本,c#,winforms,C#,Winforms,我将表单的背景色转换为绿色,然后将透明键转换为背景色(这将使WF的背景色变为透明) 但是当我运行项目时,我在左上角得到的标签有一个绿色的像素轮廓 我试着把标签的背景色变成绿色,希望它能把像素变成透明的。。。但那没有发生 我还得到了一个透明背景的图像(.png,带透明背景),该图像也得到了像素。还尝试将背景色从绿色改为石灰色,但这只会使情况恶化(像素比以前多) 有人知道如何删除这些绿色像素吗?这些是抗锯齿像素,因为你无法为控件关闭aa,所以你无法避免它们。你能做的就是在标签上画出文本,或者去掉
表单的背景色
转换为绿色
,然后将透明键
转换为背景色
(这将使WF的背景色变为透明)
但是当我运行项目时,我在左上角得到的标签有一个绿色的像素轮廓
我试着把标签的背景色
变成绿色
,希望它能把像素变成透明的。。。但那没有发生
我还得到了一个透明背景的图像(.png,带透明背景),该图像也得到了像素。还尝试将背景色从绿色改为石灰色,但这只会使情况恶化(像素比以前多)
有人知道如何删除这些绿色像素吗?这些是抗锯齿像素,因为你无法为控件关闭aa,所以你无法避免它们。你能做的就是在标签上画出文本,或者去掉标签,然后画到表格上,或者不管父对象是什么。现在,您可以选择避免aa的图形属性。您可以拍摄屏幕区域的屏幕截图,其表示为
Rectangle rect=this.RectangleToScreen(this.ClientRectangle)代码>(因为表单是透明的,所以您将截取它下面的内容)。生成一个rect
尺寸的位图,并使用Graphics.CopyFromScreen()
填充该位图,在其上绘制字符串,然后在窗体表面绘制。您不能使用双缓冲,因此要正确使用它并不容易,因为当您移动表单时,您必须使其无效,并且闪烁等待着您(这样的FPS是~24-26)。但是文本将始终完美呈现:)@Jimi我正在尝试使用Graphics.CopyFromScreen()
但是Visual Studio给我一个类似这样的错误:属性、方法或非静态字段的Graphics.CopyFromScreen(int,int,int,int,Size)需要对象引用“…这里的图形对象当然是从位图派生的。类似于:var rect=this.RectangleToScreen(this.ClientRectangle);使用(var bmp=新位图(rect.Width,rect.Height))使用(var g=Graphics.FromImage(bmp)){g.CopyFromScreen(rect.Location,Point.Empty,rect.Size);e.Graphics.DrawImage(bmp,Point.Empty);}
。现在,您可以在绘制处理程序中绘制此位图,但实际上应该重写WndProc、trapWM_paint
和另外两条消息…:要正确绘制并不容易。
this.BackColor = Color.Green;
this.TransparencyKey = BackColor;