質問

まず第一に、これはPictureBoxコントロールを透明にすることではありません。それは、完全に不透明な「キャンバス」のビットマップの透明性についてです。

PictureBoxは、常に白い背景を持つ300*300のサイズのサイズです。コントロールには透明性は必要ありません。

私が必要とするのは、透明な長方形(または他のもの)をPictureBoxに描く方法です。そのため、すでにそこにあったものはすべて、長方形を「」と見られます。

次のコードがあるとします

Bitmap bmp = new Bitmap(300, 300);
Graphics g = Graphics.FromImage(bmp);
g.FillRectangle(new SolidBrush(Color.White), 0, 0, 300, 300);
g.FillRectangle(new SolidBrush(Color.Red), 100, 100, 100, 100);
pictureBox.Image = bmp;

これにより、白いキャンバスの中央に赤い長方形が描かれます。今、私は別の長方形を含む写真に別の(透明な)「レイヤー」が必要ですが、透明です。

私は試すことができます

Brush brush = new SolidBrush(Color.FromArgb(128, 0, 80, 0));
g.FillRectangle(brush, 50, 50, 200, 200);

Alpha = 128を指定することで色を使用しているため、結果の長方形は透明である必要があるため、最初の赤い長方形をこの他の緑の角を通して見る必要があります。

ただし、これは正しく発生しません。新しい緑色の長方形の背後に赤い長方形を見ることができますが、赤いものと重複しない緑の長方形の部分は完全に不透明なままです。ただし、色のアルファ値を非常に小さな値(1-5など)に設定すると、長方形全体が透明に見えます。私の意見ではこれは正常ではありません - 5/255は半分しか透明ではなく、128/255はまったく透明ではありません...そして、G.DrawStringで以前に描画された文字列があった場合、文字列は背後に表示されます透明度のレベルに応じて、緑色の長方形またはそうではありません。たとえば、アルファが40以上(約)40以上である場合、文字列はまったく表示されず、40未満の場合は、Alpha = 0まで、より小さなアルファ値に対してより表示されます。

このブラシ(Argb色から作成された場合)はどのように適用されますか?私は何かが足りませんか?私にとっては、透明なブラシを設定すると、オブジェクトを「目に見える」のではなく、背景を「目に見える」ようにするようです。

提案の返信をありがとう。

編集 アプリケーションロジックに厄介なバグがあったようで、描画ルーチンがループで発生したため、特定の数の透明な長方形を蓄積すると、それらはますます厚くなりました。

コードは、ループから取り出されると、正しく機能します。

私の悪い。

役に立ちましたか?

解決

Alt Text http://lh4.ggpht.com/_1tpop7dzy1e/s02ivaoggti/aaaaaaaac6s/zqvzq5gdwsu/s800/capture4.png

このコードによって行われます:

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        Bitmap bmp = new Bitmap(300, 300);
        Graphics g = Graphics.FromImage(bmp);
        g.FillRectangle(new SolidBrush(Color.White), 0, 0, 300, 300);
        g.FillEllipse(new SolidBrush(Color.Blue), 25, 25, 100, 200);
        g.FillRectangle(new SolidBrush(Color.Red), 100, 100, 300, 100);
        g.DrawString("this is a STRING", SystemFonts.DefaultFont, 
            Brushes.Black, new Point(150, 150));
        pictureBox1.Image = bmp;

        Brush brush = new SolidBrush(Color.FromArgb(40, 0, 80, 0));
        g.DrawRectangle(Pens.Black, 50, 50, 200, 200);
        g.FillRectangle(brush, 50, 50, 200, 200);
    }

緑色の部分はあなたが見ることができるように不透明ではありません...文字列は完全に見えます。

私にとっては、透明なブラシを設定すると、オブジェクトを「目に見える」のではなく、背景を「目に見える」ようにするようです。

背景「より目に見える」とオブジェクト「目に見えない」は同じものです...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top