FireMonkeyで透明色の描画

解決


Jasmine  2012-12-09 06:46:39  No: 43454

Delphi-XE3を使っています。
Paintbox(あるいはBitmap)を不透明な単色で塗りつぶした後,円を描いてその内部を透明にくり抜きたいのです。つまり,Paintboxの背景が見えるようにしたいのです。
Brushカラーを透明色($00000000)に設定して円を塗りつぶしても,透明の絵の具を塗るのと同じで,何も変わりません。
何かよい方法はないでしょうか。


通りすがり  2012-12-10 22:50:49  No: 43455

1.リージョンを使う
関連:BeginPath,EndPath,PathToRegion,SelectClipRgn
http://www.geocities.jp/asumaroyuumaro/program/tips/pathtoregion.html

2.マスク画像を用意してBitbltのOPERATORで工夫する
http://homepage1.nifty.com/project21/articles/delphi/tips02.htm

TCanvas云々で慣れているなら1の方法がよろしいかと。

画像処理関連はこの掲示板のHOMEからたどった所によいサンプルがあるので読んでみるとよろしいかと思います。
TCanvasを使わなくともアドレスとバッファさえあればOKみたいになれる・・・でしょう。


DEKO  2012-12-11 00:20:23  No: 43456

こんにちは。
FireMonkey だとパスでくり抜くしかないのですかね?

procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas;
  const ARect: TRectF);
var
  R: TRectF;
  PathData: TPathData;
  PB: TPaintBox;
begin
  PB := PaintBox1;
  with PB.Canvas do
    begin
      BeginScene;
      R := RectF(0, 0, PB.Width, PB.Height);
      OffsetRect(R, PB.Position.X, PB.Position.Y);
      Stroke.Color := TAlphaColorRec.White;
      Fill.Color   := TAlphaColorRec.White;
      PathData := TPathData.Create;
      try
        PathData.MoveTo(PointF(R.Left , R.Top   ));
        PathData.LineTo(PointF(R.Right, R.Top   ));
        PathData.LineTo(PointF(R.Right, R.Bottom));
        PathData.LineTo(PointF(R.Left , R.Bottom));
        PathData.LineTo(PointF(R.Left , R.Top   ));
        PathData.AddArc(PointF(R.Left + 100, R.Top + 100), PointF(50, 50), 0, 360);
        PathData.ClosePath;
        FillPath(PathData, 1);
      finally
        PathData.Free;
      end;
      EndScene;
    end;
end;

このコードでは、フォーム上に配置された PaintBox を白く塗り潰し、
(100,100) の位置に半径 50 の円をくり抜きます。


DEKO  2012-12-11 00:47:49  No: 43457

AddEllipse の同等のコードは以下のようになります。

PathData.AddEllipse(RectF(R.Left + 50, R.Top + 50, R.Left + 150, R.Top + 150));


Jasmine  2012-12-13 05:51:22  No: 43458

FireMonkey環境なのでregionやbitbtは使えないのです。
DEKOさんのPathを使った方法でうまくいきました。
ありがとうございました。


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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