1

私は現在、C# Bitmaps und Graphics を使用して単純な画像マニピュレータをコーディングしています。私はcostum transparent elemtを使用していますが、うまくいきます。私の Draw-Method では、画像を設定するために描画してコントロールを更新します。

ImageAttributes attr = new ImageAttributes();  
attr.SetColorKey(this.transpKey, this.transpKey);  
Rectangle dstRect = new Rectangle(0, 0, this.image.Width, this.image.Height);  
e.Graphics.DrawImage(this.image, dstRect, 0, 0, this.image.Width, this.image.Height, GraphicsUnit.Pixel, attr);  
e.Graphics.Dispose();

ここで、いくつかのピクセルを消去する関数が必要です。Form を使用して BackgroindImage に描画すると、TransparencyKey-Property を使用してピクセルを「消去」できます。しかし、このプロタティは私のコスチューム コントロールには存在しません。そういうわけで「attr.SetColorKey(this.transpKey, this.transpKey);」を使ったのですが、問題があります。ピクセルを透明にするだけで、下にあるピクセルが表示されます。
ピクセルを残すのではなく、強制的に C# に置き換える方法を知っている人はいますか? または、私の問題の解決策を知っている人はいますか?
読んで、考えて、助けてくれてありがとう。

//編集: OK、「e.Graphics.CompositingMode = CompositingMode.SourceCopy;」を使用できることがわかりました。ピクセルが置き換えられるように設定します。しかし、その後、透明性は破壊されます。そして結果は同じです。何も消されていません。解決策はありますか?

4

3 に答える 3

0

私の解決策を公式に提供するために:私はいくつかの層を使用してそれを解決しました。きれいではありませんが、動作します。

于 2012-08-27T10:48:16.283 に答える
0

コントロールは描画順序としてzオーダーを使用して、1つずつ描画されるため、消去はありません。最初にフォームの背景が描画され、次にラベルが描画され、次にコントロールが描画されます。レイヤーはありません。何かが描かれると、そこにとどまります。

何かを「消去」する唯一の方法は、あなたのコントロールの下にあるコントロールが、あなたが使用できるある種のバッファに自分自身を再描画する方法を見つけることです。

私はずっと前にそれを試しましたが、実装がひどく、エラーが非常に発生しやすいため、このメソッドを放棄しました。

悪いニュースで申し訳ありませんが、私の経験からいくつかの洞察が得られることを願っています。

于 2012-06-21T19:15:16.510 に答える
0

「消去」の定義は何ですか?私にとって、それは背景の色に色を変えることを意味します。これを行うために透明度を使用するのではなく、領域を背景色でレンダリングするだけです。

于 2012-06-21T19:16:03.273 に答える