如何消除具有透明背景的图像中的“光晕”

时间:2010-02-21 23:21:40

标签: .net transparency panel

我正在使用DrawImage()在具有透明背景的表单上绘制一些图像。那些部分透明的图像会产生“晕”效应。(查看截图)

防止这种情况发生的最佳方法是什么

alt text http://www.imagechicken.com/uploads/1266798081003158300.png

修改

这些相同的图标在我的桌面上看起来很棒,所以应该有更好的方法来绘制图标。

2 个答案:

答案 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 earlierUpdateLayeredWindow的示例。

答案 1 :(得分:1)

这可能是由双重渲染引起的 - 图标渲染到透明表单上,然后表单在背景上呈现。在您的图标仅部分透明的任何地方,表单都会失去所有透明度。

也许您可以对表单进行更改以支持部分透明而不是二进制。