Ich habe eine Picturebox mit einem PNG drin. Aber selbst wenn ich BackColor auf Transparent setze, ist es nicht transparent. Irgendwelche Ideen, was könnte falsch sein? :)C#, wie macht man einen Bildhintergrund transparent?
Dank!
Ich habe eine Picturebox mit einem PNG drin. Aber selbst wenn ich BackColor auf Transparent setze, ist es nicht transparent. Irgendwelche Ideen, was könnte falsch sein? :)C#, wie macht man einen Bildhintergrund transparent?
Dank!
Ich habe auch das Problem in Bezug auf transparente Bilder konfrontiert.
müssen Sie es durch Code zeichnen. Siehe meine Frage A PictureBox Problem
EDIT:
In Paint-Ereignis (Control enthält Hintergrundbild) schreiben Dieser
//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);
Ihr Bild wurde nicht angezeigt. Jetzt Upadated –
Ihre PNG-Datei sollte auch den transparenten Hintergrund haben. Dies kann beim Erstellen der Bilddateien (PNG) erfolgen.
Die PNG hat einen transparenten Hintergrund. Wenn ich andere Farben als BackColor einstelle, wird die Farbe gesehen. Daher das Png selbst wenn ok. – Rob
Ich habe ein wenig gesucht und sieht aus, als ob andere Leute auch dieses Problem hatten. Jemand schlug vor, anstelle von PictureBox ein Panel-Steuerelement zu verwenden. Ist das eine Option für dich? – Hps
Von dem, was ich gelernt habe, kann ich es nicht innerhalb einer Windows-Form tun, da es keine Schichten für die Bilder hat. Also rate muss es als WPF machen. :)
Wie haben Sie schaffen den Hintergrund? Wird das durch Setzen der Form.BackgroundImage
eingestellt? Wenn dieser Hintergrund (das papierähnliche Bild) ein Container-Steuerelement ist, sollte die Transparenz einfach funktionieren. Wenn Sie jedoch zwei PictureBox
Objekte übereinander legen, funktioniert das nicht. Der transparente Bereich nimmt die Farbe seines übergeordneten Objekts an. Wenn Sie zwei PictureBox
Objekte haben, haben beide die Form
als ihre Eltern. Wenn dies Ihre Situation ist, können Sie dies beheben, indem Sie die Eigenschaft Parent
des transparenten Bildes als Hintergrundbild festlegen.
private void Form1_Load(object sender, EventArgs e)
{
transparentPictureBox.Parent = backgroundPictureBox;
}
Beim Wechsel der Parent
Eigenschaft, die Location
des tranparentPictureBox
wird auf seiner neuen Mutter relativiert. Sie müssten die x- und y-Koordinaten des Hintergrundbildes vom transparenten Bild subtrahieren. Sehen Sie meine Antwort auf A PictureBox Question für ein Beispiel mit einem Screenshot.
AFAIK, können Sie nicht die Parent
im Designer, nur in Code. Daher wird der Designer immer noch nicht ein transparentes Bild anzeigen, aber zur Laufzeit sollte es. Das gleiche Problem tritt auf, wenn Sie ein transparentes Objekt Label
auf ein PictureBox
Objekt setzen.
Sie müssen es wirklich durch Code zeichnen. Platzieren Sie eine PictureBox auf Ihrem Formular, stellen Sie sizeMode und Docking ein, wie Sie möchten.Dann können Sie die folgende Funktion auf dem Paint-Ereignis des PictureBox Feuer:
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
}
}
Das ist meine Klasse, die in der obigen Funktion verwiesen wird:
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();
}
}
Dank. Chagbert.
Der Screenshot ist vom Designer - passiert das auch beim Ausführen der Anwendung? – Oded
ja, tut es. :) – Rob
Es sieht so aus, als ob ein Farbverlauf in diesem Bild ist. Selbst wenn Sie die richtige Farbe für den Alpha-Kanal finden, wird dieser Farbverlauf als Sünde hässlich sein. – kenny