2017-10-14 3 views
0

Ich habe ein Hintergrundbild, dann möchte ich mehrere andere oben drauf laden. Jedes Bild ist ein PNG mit einem Alphakanal, bei dem verschiedene Bereiche nicht transparent sind.C#: Erstellen Sie einen Stapel von PictureBox

Ich legte eine PicureBox auf ein Formular. Dann im Code:

private List<PictureBox> layers = new List<PictureBox>(); 

for (int l = 0; l < 11; l++) 
{ 
    Image i = (Image) Properties.Resources.ResourceManager.GetObject(l.ToString()); 
    PictureBox b = new PictureBox 
    { 
     Parent = form_picture, 
     Image = i, 
     Dock = DockStyle.Fill, 
     SizeMode = PictureBoxSizeMode.Zoom, 
     BackColor = Color.Transparent 
    }; 
    //b.BringToFront(); 

    layers.Add(b); 
} 

wo „form_picture“ die PictureBox auf dem Formular platziert ist, und meine Ressource Bilder werden 0,1,2..10 genannt.

Es wird nur das erste Bild oder das letzte Bild angezeigt (Entfernen des Kommentars zur BringToFront-Methode). Es scheint kein Problem der Transparenz zu sein, weil ich das Hintergrundbild richtig sehe, aber nur den ersten oder letzten undurchsichtigen Bereich der oberen Ebenen.

Ich fürchte, ich verwende nicht richtig die Eigenschaften.

+0

Ja. In der Tat, wenn ich mich gegenseitig repariere (d. H. 0 bis Hintergrund, 1 bis 0, 2 bis 1, etc ...), sehe ich alle undurchsichtigen Bereiche (wie erwartet) und das Hintergrundbild in transparenten Bereichen. Aber ich kann jetzt nicht nur eins verstecken (es wird auch alle Kinder verstecken) – Mark

+0

@someone: https://stackoverflow.com/questions/19910172/how-to-make-picturebox-transparent – Mark

Antwort

1

IMO, Sie sollten keine Bilderboxen verwenden. Sie sind zu teuer für das, was Sie versuchen zu tun. Verwenden Sie stattdessen Graphics.DrawImage.
Die System.Drawing.Image hat eine PixelFormat Eigenschaft des Typs System.Drawing.Imaging.PixelFormat, die Ihnen mit dem Alpha-Kanal helfen sollte.

+0

Nun, es gibt nur 10 PictureBox, Ich denke nicht, dass das zu teuer ist. Es funktioniert einfach nicht (deshalb mag ich .NET nicht). Das manuelle Zeichnen von Bildern im OnPaint-Ereignis wurde behoben ... – Mark