Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 标签周围的绿色像素';s文本_C#_Winforms - Fatal编程技术网

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、trap
WM_paint
和另外两条消息…:要正确绘制并不容易。
this.BackColor = Color.Green;
this.TransparencyKey = BackColor;