0

VS 2008 でフォーム アプリケーションを作成していますが、2 つの画像を重ねると動かなくなりました。これらの画像は透明なので、ブレンドできるはずですが、結果は次のようになります。 ここに画像の説明を入力

これと似たような投稿を見たことがありますが、これら 2 つの画像が混ざり合わない理由を理解できないようです。以下は、私がそれをどのように行っているかのコードです。

            InitializeComponent();
        this.Width = 700;
        this.Height = 768;

        Bitmap BackgroundImg = new Bitmap(@"C:\Users\Classic.bmp");
        Bitmap img = new Bitmap(@"C:\Users\Lime.bmp");
        backImage.Image = BackgroundImg;
        backImage.Width = 700;
        backImage.Height = 768;
        backImage.Location = new Point(0, 0);
        overImage.Image = img;
        overImage.Width = img.Width;
        overImage.Height = img.Height;
        overImage.Parent = backImage;
       //overImage.BackColor = Color.Transparent;
        overImage.Location = new Point(200, 200);

backImage と overImage は pictureBoxes です

4

2 に答える 2

2

あなたの問題は overImage.Parent プロパティにあります。PictureBox は、その親に対する透過性をサポートします。しかし、overImage の親は backImageではなく form ですしたがって、フォームは画像ではなく背景として表示されます。backImage の代わりにフォームの BackgroundImage プロパティを使用すると問題が解決することに注意してください。

これは、PictureBox が ContainerControl ではないために発生しました。したがって、overImage をフォームにドロップすると、単にbackImage の子コントロールのように見えますそうではなく、デザイナーがフォームを親にしました。Location プロパティと View + (Other Windows) + Document Outline ウィンドウからわかります。そのウィンドウは、親子関係を非常に明確に示しています。overImage をドラッグして backImage の子にしようとしてもうまくいかないことに注意してください。

Parent プロパティを backImage に変更することは可能ですが、コードで行う必要があります。

もう 1 つの簡単な回避策は、PictureBox コントロールをまったく使用せず、フォームの Paint イベントで e.Graphics.DrawImage() を使用して画像を描画することです。ペイントの単純なレイヤー、それ以外の場合は WPF が透明度を実装する方法。2 行のコードで、UI も高速になります。

于 2013-06-25T01:19:49.030 に答える
0

あなたの問題は、ビットマップ画像が透明度をサポートしていないという事実に起因すると思います。

.png (たとえば) を試して、次のリンクで説明されている SetColorKey メソッドを使用します: http://msdn.microsoft.com/en-us/library/e7755txx.aspx

于 2013-06-24T21:28:42.043 に答える