我正在使用DrawImage()在具有透明背景的表单上绘制一些图像。那些部分透明的图像会产生“晕”效应。(查看截图)
防止这种情况发生的最佳方法是什么
alt text http://www.imagechicken.com/uploads/1266798081003158300.png
修改
这些相同的图标在我的桌面上看起来很棒,所以应该有更好的方法来绘制图标。
答案 0 :(得分:1)
源图像是完全alpha还是具有透明色/一位alpha蒙版?一位alpha图像通常采用背景颜色,通常为白色并且只是淡化。您的图像看起来与您在非白色背景上绘制一位Alpha图像时的图像完全相同。
如果使用一位透明度键,则会获得“光晕”,或者将部分透明值与表单背景颜色混合。所以'晕'在这种形式下是粉红色的:
public class Form1 : Form
{
Image newImage;
public Form1()
{
this.BackColor = Color.Pink;
this.ClientSize = new Size(168, 168);
this.TransparencyKey = this.BackColor;
newImage = Image.FromFile(Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.MyPictures),
"dot-mac-logo.png"));
}
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.DrawImage(newImage, 20, 20);
}
}
所以不要对完整的alpha图像使用on-bit透明度 - 我不太确定如何在C#中使用它,但在C中你会使用UpdateLayeredWindow
MSDN {{3} }指定屏幕外DC和窗口表面之间的alpha混合。
有一个使用来自C#one I made earlier的UpdateLayeredWindow
的示例。
答案 1 :(得分:1)
这可能是由双重渲染引起的 - 图标渲染到透明表单上,然后表单在背景上呈现。在您的图标仅部分透明的任何地方,表单都会失去所有透明度。
也许您可以对表单进行更改以支持部分透明而不是二进制。