Imageで描画した図形の線以外を透明にする

解決


のい  2012-05-24 01:11:30  No: 42292

過去の質問確認して、似ているのが何個かありましたが解決にいたれなかったので質問です。

現在FormにPanelが1つあり、その中にImageをつけています。
そのImageで
Image1.Canvas.Rectangleを行い四角を描画すると、白の背景に四角が描画
されます。
過去ログを見て、

  with Image1 do begin
     Transparent:=True;
     Canvas.Brush.Style :=bsClear;
     Canvas.Brush.Color :=clWhite;
   end;

を追記してみたのですが、単に四角形の中だけが透過された状態で、
四角形の外側は背景白のままです。

やりたいことは四角で書いた部分の線以外のImage1を全て透明としたいのですが、方法ありますか?


しん  2012-05-24 01:46:40  No: 42293

Image1.Canvas.Brush.Color := clFuchsia;
Image1.Picture.Bitmap.TransparentColor := clFuchsia;
Image1.Canvas.FillRect(Image1.ClientRect);
とした上でRectangleを行えば、お望みの動作が得られると思います。

やってることを簡単に説明すれば、
透過色を設定し、その透過色であらかじめ全体を塗りつぶしているだけです。


のい  2012-05-24 02:11:26  No: 42294

しんさん
ありがとうございます。

実際にやってみましたが、
> Image1.Canvas.FillRect(Image1.ClientRect);
だけが効いているみたいで、これだけのコードで、四角は透明な上に描画されます。(ただ固定位置からMouseDownした位置までの四角)

ただ、そのあとRectangleで指定位置に四角を書きたいのですが、これは書くことができず、
また実際
> Image1.Canvas.Brush.Color := clFuchsia;
> Image1.Picture.Bitmap.TransparentColor := clFuchsia;
はあってもなくても結果は同じになります。


takana  2012-05-24 07:22:59  No: 42295

Rectangleではなく
LineToで四角を描画してみては?


のい  2012-05-24 17:54:42  No: 42296

アドバイスありがとうございます。

すいません!
できました。

  Image1.Canvas.FillRect(Image1.ClientRect);

のあとに

  Image1.Picture := nil;

をやってしまっていたのが、原因でした。

  Image1.Picture := nil;
  Image1.Canvas.FillRect(Image1.ClientRect);

のあとRectangleをやることで思い通りの結果得られました。
ありがとうございます。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加