我有一个带有png的图片框。即使我将BackColor设置为Transparent,它也不透明。什么想法可能是错的? :)
谢谢!
答案 0 :(得分:5)
我也遇到过有关透明照片的问题。
你必须通过代码绘制它。 请参阅我的问题A PictureBox Problem
修改强>
在绘制事件(包含背景图像的控件)中 写这个
//If added your image in project's resources get from there OR your Image location
Image img = yourNamespace.Properties.Resources.yourPicture;
e.Graphics.DrawImage(img,50,50,100,100);
答案 1 :(得分:3)
您的PNG文件也应具有透明背景。这可以在创建图像(png)文件时完成。
答案 2 :(得分:1)
你真的必须通过代码绘制它。在您的表单上放置一个pictureBox,设置sizeMode并根据需要对接。然后你可以在pictureBox的PAINT事件上激活以下函数:
public void LogoDrawTransparent(PaintEventArgs e) { // Create a Bitmap object from an image file. Image myImg; Bitmap myBitmap;
try
{
myImg = cls_convertImagesByte.GetImageFromByte(newImg);
myBitmap = new Bitmap(myImg); // @"C:\Temp\imgSwacaa.jpg");
// Get the color of a background pixel.
Color backColor = myBitmap.GetPixel(0, 0); // GetPixel(1, 1);
Color backColorGray = Color.Gray;
Color backColorGrayLight = Color.LightGray;
Color backColorWhiteSmoke = Color.WhiteSmoke;
Color backColorWhite = Color.White;
Color backColorWheat = Color.Wheat;
// Make backColor transparent for myBitmap.
myBitmap.MakeTransparent(backColor);
// OPTIONALLY, you may make any other "suspicious" back color transparent (usually gray, light gray or whitesmoke)
myBitmap.MakeTransparent(backColorGray);
myBitmap.MakeTransparent(backColorGrayLight);
myBitmap.MakeTransparent(backColorWhiteSmoke);
// Draw myBitmap to the screen.
e.Graphics.DrawImage(myBitmap, 0, 0, pictureBox1.Width, pictureBox1.Height); //myBitmap.Width, myBitmap.Height);
}
catch
{
try { pictureBox1.Image = cls_convertImagesByte.GetImageFromByte(newImg); }
catch { } //must do something
}
}
这是我在上面的函数中引用的类:
class cls_convertImagesByte
{
public static Image GetImageFromByte(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
return returnImage;
}
public static byte[] GetByteArrayFromImage(System.Drawing.Image imageIn)
{
MemoryStream ms = new MemoryStream();
imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
return ms.ToArray();
}
}
感谢。 chagbert。
答案 3 :(得分:0)
你是如何创建背景的?是通过设置Form.BackgroundImage
设置的吗?
如果那个背景(纸张像图像)是一个容器控件,那么透明度应该可行。
但是,如果要将两个PictureBox
对象放在彼此的顶部,则这不起作用。透明区域采用其父对象的颜色。如果您有两个PictureBox
个对象,则他们都将Form
作为其父级。如果这是您的情况,可以通过将透明图像的Parent
属性设置为背景图像来解决。
private void Form1_Load(object sender, EventArgs e)
{
transparentPictureBox.Parent = backgroundPictureBox;
}
更改Parent
属性时,Location
的{{1}}将相对于其新父级。您必须从透明图像中减去背景图像的x和y坐标。有关屏幕截图的示例,请参阅A PictureBox Question上的答案。
AFAIK,您不能仅在代码中在Designer中设置tranparentPictureBox
。因此,Designer仍然不显示透明图像,但在运行时它应该。
如果您在Parent
对象的顶部放置透明Label
,则会出现同样的问题。
答案 4 :(得分:-1)
从我学到的东西,我无法在Windows窗体中执行,因为它没有图像的图层。所以猜测必须把它作为WPF。 :)