Winform【半透明】用户控件开发,承载窗体“透明”导致半透明锯齿,如何解决?翻过很多帖子(包括CSDN)都无解,祥见内图
现在我想开发一个Winform的用户控件,可以配置一张png图作为背景图,并且支持半透明的效果(不仅仅是透明!)
但实际开发中发现,如果这个用户控件的承载窗体“透明”了,控件的半透明效果会锯齿。。见图:
PS 1. 控件OnPaint时设置高质量、抗锯齿,无解。
g.CompositingMode = CompositingMode.SourceOver;
g.CompositingQuality = CompositingQuality.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.SmoothingMode = SmoothingMode.AntiAlias;(SmoothingMode.HighQuality; 无解)
PS 2. 设置控件支持透明背景,无解。
SetStyle(ControlStyles.SupportsTransparentBackColor | ControlStyles.UserPaint, true);
this.BackColor = Color.Transparent;
PS 3. 设置控件支持透明背景方法2,无解。
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT
return cp;
}
}
唯一能让控件的png半透明正常的方式,只能是使承载窗体不要透明,或者使控件本身不透明,可惜这是必须的。。
试过很多方法,翻过很多帖子(包括CSDN),都无解,还望有人能指点下啊。。谢谢。。。
------解决方案--------------------不要怪别的,原始图片问题,背景不是纯正的
------解决方案--------------------无解,绝对无解,唯有DX有解。。。。我猜的。。。
------解决方案--------------------应该是图的问题,找个高清的最好是黑白的
------解决方案--------------------你到网上搜搜相关锯齿的插件吧,VS能够把这些搞懂真不错
------解决方案--------------------我最近也做过类似的,问题解决了。你可以试试把图片的四个角设定一个颜色,假如是Red。。在你的窗体的BackColor和TransparencyKey都设为Red,后座是将窗体上指定的颜色透明。。。。
------解决方案--------------------期待,同样的问题没有结果。
------解决方案--------------------你的图片太大了.看不清楚.建议使用Updatelayeredwindow来做.
------解决方案-------------------- Protected Overloads Overrides ReadOnly Property CreateParams() As CreateParams
Get
Dim cp As CreateParams = MyBase.CreateParams
cp.ExStyle = cp.ExStyle Or &H80000 '应用层样式
Return cp
End Get
End Property