透明背景显示为黑色
我试图让图像显示在另一个图像的顶部,仍然透过透明背景显示下方的图像。我已经得到它,所以新图像出现在另一个上面,但是将BackColor设置为Color.Transparent只会导致黑色背景。透明背景显示为黑色
全码:
public partial class frm_airportApplication : Form
{
PictureBox PicBox;
public frm_airportApplication()
{
InitializeComponent();
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x000000200;
return cp;
}
}
private void button1_Click(object sender, EventArgs e)
{
AllowTransparency = true;
plane p = new plane();
p.getPB().Parent = pb_airport;
this.Controls.Add(p.getPB());
this.Update();
}
protected void InvalidateEx()
{
if (Parent == null)
return;
Rectangle rc = new Rectangle(this.Location, this.Size);
Parent.Invalidate(rc, true);
}
protected override void OnPaintBackground(PaintEventArgs pevent)
{
//do not allow the background to be painted
}
private void button2_Click(object sender, EventArgs e)
{
AllowTransparency = true;
ResourceManager resourceManager = new ResourceManager("Airport_Application.Properties.Resources", GetType().Assembly);
PicBox = new PictureBox();
PicBox.BackColor = Color.Transparent;
PicBox.Image = (Bitmap)resourceManager.GetObject("plane_icon");
PicBox.Top = 100;
PicBox.Width = 120;
PicBox.Height = 120;
PicBox.Left = 10;
PicBox.SizeMode = PictureBoxSizeMode.Zoom;
PicBox.Parent = pb_airport;
Controls.Add(PicBox);
PicBox.BringToFront();
}
}
public class plane
{
PictureBox pb;
Bitmap image;
ResourceManager resourceManager;
public plane()
{
resourceManager = new ResourceManager("Airport_Application.Properties.Resources", GetType().Assembly);
image=(Bitmap)resourceManager.GetObject("plane_icon");
pb = new PictureBox();
pb.Image = image;
pb.Top = 500;
pb.Width = 100;
pb.Height = 100;
pb.Left = 50;
pb.SizeMode = PictureBoxSizeMode.Zoom;
pb.BackColor = Color.Transparent;
}
public PictureBox getPB()
{
return pb;
}
}
我发现了很多谁也有类似的问题,但没有解决方案的帮助的人。
简而言之,您无法使用Windows窗体中的默认PictureBox控件轻松实现透明度。
要么切换到WPF,默认情况下它支持每个位的透明度,或者使用自定义控件。有一次,我创造了这样叫APPICON控制,但它是GPL,不是商业友好的下发布的,
http://mymobilepack.codeplex.com/SourceControl/changeset/view/39314#512415
对于形式,你可以试试这个:
this.BackColor = System.Drawing.Color.XXX;
this.TransparencyKey = System.Drawing.Color.XXX;
您可以尝试解决它的位图级别:
使位图格式的图像,使的backgroundColor TRANSPARANT用这种方法:
bm.MakeTransparent(Color.XXX);
我似乎解决了类似的问题,我的启动画面BIJ设置计时器每100ms, 和呼叫的DoEvents在它:
private void timer1_Tick(object sender, EventArgs e)
{
//BringToFront();
Application.DoEvents();
}
希望这有助于
您可以通过设置“区域”特性很容易地创建一个形状不规则的形式。这里有一个例子:
至于真正透明的控制,这里有一步一步的指示的优秀资源:
它已经一段时间,但我认为你必须将您的表单设置为允许透明货币
this.AllowTransparency = true;
or
YourForm.AllowTransparency = true;
即将摆脱黑色
如果你想覆盖(重于形式,而不是图像)在图像的图像,这将使窍门:
overImage.Parent = backImage;
overImage.BackColor = Color.Transparent;
overImage.Location = thePointRelativeToTheBackImage;
其中overImage和backImage是与png(具有透明背景)PictureBox。
我有同样的问题,但我方才面板应该已经透明所以我可以看到它下面的一切。
问题出在DoubleBuffered属性,应该设置为false。
this.DoubleBuffered = false;
没有黑暗了。
是的,你设想它的透明度实际上并不存在于WinForms中。 – 2012-03-11 08:16:44
确实。我一直在苦苦挣扎,只是发现wpf几乎没有任何努力就能做到。 – Silvermind 2012-03-11 10:12:45