canvasで描いた図形の半透明化の方法

解決


タコイカ  2009-11-06 18:55:05  No: 36100

canvasで描いた図形の半透明化の方法ってできますか?
私はまだdelphiを使い始めでうまく説明できないのですが、
キャンバスで直接フォームに描いた図形(○や□)をbssolidで塗りつぶし、それを半透明にしたいのです。
調べてもビットマップを半透明化する方法は出てきますが、フォームに描いた図形を半透明化する方法は出てきませんでした。
論理演算?というものを調べてみましたがよくわかりません。
初歩的な質問かもしれませんがどなたか教えてください


monaa  2009-11-06 23:05:15  No: 36101

多分レスつかないと思いますので、私の知ってる限りで。
Windowフォームの上に張り付いたボタン等のコントロールはAPIでは半透明化できません、Windowsがやってくれるのはあくまでフォームのみです。
そのため自力でやらねばなりません。
Canvasに重ねて描く二つの画像の上を半透明化する場合は、ネットにアルゴリズムが転がってるかと思います、
まずは論理演算のような高速化手法を用いず、整数計算で実装して、それを理解、習得できたら、少しずつ論理演算に変換していくことをお勧めします。
それにしても、最低限Bitmapの色の管理方法と、各ピクセルデータへのアクセス、半透明合成アルゴリズムは把握しておく必要があります。
全然初歩的ではありません。


Quest  2009-11-07 01:35:54  No: 36102

フォーム上のcanvasですが、無茶な力技です。
とりあえず、Form上に描いた図形が半透明になった様に見えます。
フォーム上にボタンを置いて以下のようにします。
細かい事は気にしていないので、フォームを移動すると馬脚を現します。

procedure TForm1.Button1Click(Sender: TObject);
begin
  Canvas.Brush.Color := clRed;
  Canvas.Brush.Style := bsSolid;
  Canvas.Rectangle(10, 10, 100, 100);
  TransparentColor := True;
  TransparentColorValue := clRed;
  with TForm.Create(Self) do
  begin
    Top := Self.Top;
    Left := Self.Left;
    Width := Self.Width;
    Height := Self.Height;
    AlphaBlend := True;
    AlphaBlendValue := 128;
    Show;
  end;
  BringWindowToTop(Handle);
end;


タコイカ  2009-11-08 03:29:19  No: 36103

お二人ともありがとうございます。
初心者用ではないということで、改めて検討することにしました。
ご迷惑をおかけしました;;


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

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






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