2011-09-09 12 views
1

上に透明の四角形を描きます。通常、私は、画像の部分をクリアしたい場合、私はちょうどC#のグラフィックIは互いに岩下層状2枚の画像を有し、上部画像の部分をクリアできるようにしたい領域

g.FillRectangle(Brushes.White,x,y,width,height); 

を行うことによって、それに背景色を塗るでしょうが、私は一番上の画像の上にそれを行う場合は下の画像のその領域は、白い長方形によってカバーされます。私はやってみた

g.FillRectangle(Brushes.Transparent,x,y,width,height); 

しかし、それはすべての前の内容の領域をクリアしていないようです。私はその領域内のピクセルを透明にすることができます方法はありますか?

答えて

2

これは不可能です。

GDI +とGraphicsクラスは、層状の描画をサポートしていません。あなたが前の画像を上書きした後、それらのピクセルはなくなっです。

2つの四角形を取るDrawImageオーバーロードを呼び出すことによって、表示する前のイメージの部分を再描画する必要があります。

下のイメージに透明部分が含まれている場合は、透明部分が正しくオーバーレイされるように、FillRectangleを呼び出して、その領域を白(または元の背景が何であれ)にクリアする必要があります。

2

イメージを直接ペイントしないこともできます。用途:

System.Windows.Forms.PictureBox 

、それは画像の視認性/ transaparencyを変更するには、プロパティ

Region 

です。領域は長方形である必要はありません。これは、任意の行のセットから定義できます。

PS:Brushes.Transparent実際に透過的ではなく、親コンテナのBackColorを意味します。

+1

あなた 'PS'が唯一の真で描画するクリップ&地域を設定します。ビットマップは完全なアルファブレンド透明度をサポートします。しかし、「透明」とは「何もしない」ことを意味します。 「ピクセルを消去する」という意味ではありません。 – SLaks

3
//using System.Drawing.Drawing2D; 

g.FillRectangle(Brushes.White,x,y,width,height); 
g.CompositingMode = CompositingMode.SourceCopy;  
g.FillRectangle(Brushes.Transparent,x,y,width,height); 
+1

これは私のために動作しませんでした。私は何の違いに気付かなかった。 –

+0

これは機能しません、CompositingMode.SourceCopyはRGBチャネルにのみ影響します。 –

0
float[][] ptsArray ={ 
      new float[] {1, 0, 0, 0, 0}, 
      new float[] {0, 1, 0, 0, 0}, 
      new float[] {0, 0, 1, 0, 0}, 
      new float[] {0, 0, 0, 0.5f, 0}, 
      new float[] {0, 0, 0, 0, 1}}; 
      ColorMatrix clrMatrix = new ColorMatrix(ptsArray); 
      ImageAttributes imgAttributes = new ImageAttributes(); 
      imgAttributes.SetColorMatrix(clrMatrix, 
      ColorMatrixFlag.Default, 
      ColorAdjustType.Bitmap); 
      _ImageThumb.Height, imgAttributes); 
      e.Graphics.DrawImage(_ImageThumb,new Rectangle(0, 0, _ImageThumb.Width,_ImageThumb.Height),0, 0, _ImageThumb.Width, _ImageThumb.Height,GraphicsUnit.Pixel, imgAttributes); 

//使用するには、コントロールの上にペイント時

関連する問題