2017-10-14 4 views
0

私は背景イメージを持っています。各画像は、異なる領域が不透明であるアルファチャンネルを持つpngです。C#:PictureBoxのスタックを作成します。

私はPicureBoxをフォームに配置しました。そして、コードで:

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); 
} 

「form_pictureは」ピクチャボックスで、フォーム上に置き、私のリソース画像が0,1,2..10命名されています。

これは、最初のイメージまたは最後のイメージのみを表示します(BringToFrontメソッドへのコメントの削除)。 背景画像を正しく見ることができますが、上位レベルの最初または最後の不透明領域のみが表示されるため、透明性の問題はありません。

私は正しくプロパティを使用していないと思います。

+0

はい。実際、お互いを育てると(0からバックグラウンド、1から0,2から1など)、私はすべての不透明な領域(予想どおり)と背景の透明な領域が見えます。しかし、私はただ1つだけ隠すことはできません(それはすべての子供も隠すでしょう) – Mark

+0

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

答えて

1

IMOでは、ピクチャボックスを使用しないでください。あなたがしようとしているものはあまりにも高価です。代わりにGraphics.DrawImageを使用してください。
System.Drawing.Imageには、System.Drawing.Imaging.PixelFormatというPixelFormatタイプのプロパティがあり、アルファチャンネルを手助けする必要があります。

+0

まあ、10のピクチャボックス、私はこれが高すぎるとは思わない。それだけで動作しません(これは私が.NETが好きではない理由です)。 OnPaintイベントで手動で画像を描画することで解決... – Mark

関連する問題