canvasで描いた図形の半透明化の方法ってできますか?
私はまだdelphiを使い始めでうまく説明できないのですが、
キャンバスで直接フォームに描いた図形(○や□)をbssolidで塗りつぶし、それを半透明にしたいのです。
調べてもビットマップを半透明化する方法は出てきますが、フォームに描いた図形を半透明化する方法は出てきませんでした。
論理演算?というものを調べてみましたがよくわかりません。
初歩的な質問かもしれませんがどなたか教えてください
多分レスつかないと思いますので、私の知ってる限りで。
Windowフォームの上に張り付いたボタン等のコントロールはAPIでは半透明化できません、Windowsがやってくれるのはあくまでフォームのみです。
そのため自力でやらねばなりません。
Canvasに重ねて描く二つの画像の上を半透明化する場合は、ネットにアルゴリズムが転がってるかと思います、
まずは論理演算のような高速化手法を用いず、整数計算で実装して、それを理解、習得できたら、少しずつ論理演算に変換していくことをお勧めします。
それにしても、最低限Bitmapの色の管理方法と、各ピクセルデータへのアクセス、半透明合成アルゴリズムは把握しておく必要があります。
全然初歩的ではありません。
フォーム上の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;
お二人ともありがとうございます。
初心者用ではないということで、改めて検討することにしました。
ご迷惑をおかけしました;;
ツイート | ![]() |