我正在尝试绘制一个具有透明背景和来自主体的模糊阴影的表单。
我这样做的方法是使用表格作为边界框,然后在边框中绘制实际形状的主体,边缘上有阴影显示。 阴影从绘制的身体后面扩展。
所以,我有一个表格,我在里面画。 我希望表单的背景是透明的,这样只显示绘制的正文和阴影。
阴影有问题。 阴影是一个位图,我在其中应用AForge的高斯模糊来创建阴影效果。 位图放在绘制的实体后面,使其显示为阴影。
问题在于:形状的背景仍然是阴影所在的地方。 除了模糊的黑色外,阴影位图是透明的。
我尝试将backcolor设置为透明或misc颜色,然后将transparencykey设置为相同的颜色。结果保持不变。
(淡粉色不是程序的一部分,想象它是桌面)
(我只是为这个例子绘制阴影,而不是白色的身体(工作正常),形式的背景拒绝在阴影存在的地方变得透明。)
这是用于创建阴影位图的代码。
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);
}
拜托,请指点什么?
答案 0 :(得分:1)
看看这个file in a github repository,主要是123 - 131,253 - 415行。代码使用GDI +方法绘制替换表单背景的透明位图。
您无法在Form
上绘制透明的内容,因为所有方法(例如OnPaint
)都使用Format24bppRgb
不是 Format32bppArgb
,这就是您所需要的。