Winforms透明表单问题

时间:2016-07-16 18:19:57

标签: c# winforms transparency

我正在尝试绘制一个具有透明背景和来自主体的模糊阴影的表单。

我这样做的方法是使用表格作为边界框,然后在边框中绘制实际形状的主体,边缘上有阴影显示。 阴影从绘制的身体后面扩展。

所以,我有一个表格,我在里面画。 我希望表单的背景是透明的,这样只显示绘制的正文和阴影。

阴影有问题。 阴影是一个位图,我在其中应用AForge的高斯模糊来创建阴影效果。 位图放在绘制的实体后面,使其显示为阴影。

问题在于:形状的背景仍然是阴影所在的地方。 除了模糊的黑色外,阴影位图是透明的。

我尝试将backcolor设置为透明或misc颜色,然后将transparencykey设置为相同的颜色。结果保持不变。

我想要实现的目标的图片: enter image description here

(淡粉色不是程序的一部分,想象它是桌面)

我得到的图片: enter image description here

(我只是为这个例子绘制阴影,而不是白色的身体(工作正常),形式的背景拒绝在阴影存在的地方变得透明。)

这是用于创建阴影位图的代码。

    private void _CreateShadow()
    {
        shadowImg = new Bitmap(m_ShadowRect.Width, m_ShadowRect.Height, PixelFormat.Format32bppArgb);
        Graphics g = Graphics.FromImage(shadowImg);
        int diameter = Math.Min(shadowImg.Width, shadowImg.Height);
        g.DrawEllipse(m_ShadowPen, m_ShadowWidth, m_ShadowWidth, m_BodyRect.Width - m_ShadowWidth, m_BodyRect.Height - m_ShadowWidth);
        filter.ApplyInPlace(shadowImg);
    }

    private void _DrawShadow(Graphics g)
    {
        g.DrawImage(shadowImg, m_ShadowRect.X, m_ShadowRect.Y);
    }

    protected override void OnPaint(PaintEventArgs pe)
    {
        base.OnPaint(pe);

        _DrawShadow(pe.Graphics);
        _DrawBody(pe.Graphics);
    }

拜托,请指点什么?

1 个答案:

答案 0 :(得分:1)

看看这个file in a github repository主要是123 - 131,253 - 415行。代码使用GDI +方法绘制替换表单背景的透明位图。

无法Form上绘制透明的内容,因为所有方法(例如OnPaint都使用Format24bppRgb 不是 Format32bppArgb,这就是您所需要的。