D7で、お絵かきソフトのようなものを作っています。
スタンプのような機能で、クリックしたら別なBitmapを
Image上にcopyするように考えています。
procedure TF_Map_main.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
StampBitmap: TBitmap;
begin
StampBitmap := TBitmap.Create;
try
StampBitmap.LoadFromFile('C:\TNhato4.bmp');
image.Canvas.CopyMode := cmSrcAnd;
Image.Canvas.CopyRect(
Rect(X,Y,X + StampBitmap.Width ,Y+StampBitmap.Height),
StampBitmap.Canvas,
Rect(0,0,StampBitmap.Width ,StampBitmap.Height));
finally
StampBitmap.Free;
end;
end;
星型のマークで中が黄色で、周りが白のBitmapをスタンプ用の画像として
白いCanvasに貼り付けたいのですが
CopyMode := cmSrcAnd;だと背景は透過してくれるのですが、肝心の
星型のマークの中も 重ねて貼り付けた場合 したのマークのが重なって見えます。
上に貼り付けた、星型のマークの中はしたの画像が見えないようには
出来ないでしょうか?
重ねたら絶えず、上側が優先に・・
同じ画像で、ペイントで貼り付ける場合は、意図としたように出来るのです。
よろしくお願いします。
描くビットマップの Transparent を True にし、Canvas.Draw() で描くと
背景を透過できます。ヘルプで見てください。
新規で以下のプログラムを試してください
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private 宣言 }
public
bmp:array[0..4] of TBitmap;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
color:array[0..4] of TColor;
begin
color[0] := clGreen;color[1] := clBlue;color[2] := clRed;
color[3] := clYellow;Color[4] := clLime;
for i := 0 to 4 do
begin
bmp[i] := TBitmap.Create;
bmp[i].Width := 50;
bmp[i].Height := 50;
bmp[i].Canvas.Font.Height := -30;
bmp[i].Canvas.Font.Color := color[i];
bmp[i].Canvas.TextOut(0,0,'★');
bmp[i].Transparent := true;
end;
Randomize;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
i:integer;
begin
for i := 0 to 4 do bmp[i].Free;
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Canvas.Draw(X-15,Y-15,bmp[Random(5)]);
end;
フォームをクリックすると星型が背景透過で描かれます。重ねて見ると分かります。
りおりお さん、ありがとうございました。
上記コード、及び作成ソース内を変更し、確認出来ました。
ソースまでご提示頂きありがとうございました。
これで、試したいことの枠が広がりました。