제가 그림파일을 하나 이미지1에 띄워놓고 원본 손상없이
그위에 마우스 클릭시 원하는 위치에 글씨나 표시를 쓰고 또는 지우는 작업을 해야해서
또하나의 이미지2를 동적생성해서 원하는 작업을 했습니다.
그럼데 특정pc 에서 이미지2를 다시 생성했을때 밑그림이 안보입니다.
image2.Transparent := True; 로 했는데도요.
첨부한 샘플프로그램을 문제pc 에서 실행했을 때(일반적으론 잘 됩니다.)
처음엔 밑그림이 보이고 이미지위에 마우스클릭으로 사각형 그리고
지우려고 버튼을 누르고 나면 그다음부터 하얗게 됩니다.
왜 특정컴에서만 그럴까요? (실행파일 첨부합니다.)
procedure TForm1.Button1Click(Sender: TObject);
begin
Image2.Free;
Image2:=TImage.Create(nil);
Image2.Parent := Panel1;
Image2.Align := alClient;
image2.Width := 1280;
image2.Height := 800;
image2.Transparent := True;
image2.OnMouseDown := Image2MouseDown;
end;
procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Image2.Canvas.Rectangle(x,y,x+10,y+10);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Image2.Free;
Image2:=TImage.Create(nil);
Image2.Parent := Panel1;
Image2.Align := alClient;
image2.Width := 1280;
image2.Height := 800;
image2.Transparent := True;
image2.OnMouseDown := Image2MouseDown;
end;
image에서 Transparent되는 Color는 지정하지 않으면 Canvas.Pixels에서 좌측 맨아래 색을 가져올 겁니다.
그래서 위 소스에서 간단히 하시려면 미리 색을 그린 빈 박스를 그리는 것이 좋습니다.
중간중간에 투명색을 바꾸려면 image2.Picture.Bitmap.TransparentColor := clWhite도 있으나
이경우는 비트맵일 경우입니다 그래서 범용적으로 하려면
TImage(Sender).Canvas.Pixels[0, TImage(Sender).Height - 1] := clWhite;식으로 잠깐 바꿔 사용도 합니다.
//생성시
Image2.Free;
Image2:=TImage.Create(nil);
Image2.Parent := Panel1;
Image2.Align := alClient;
image2.Width := 1280;
image2.Height := 800;
//색지정, 빈박스, 안전하게 투명색 지정(단, 비트맵일 경우만)
Image2.Canvas.Brush.Color := clWhite;
Image2.Canvas.Pen.Color := clWhite;
Image2.Canvas.Rectangle(0, 0, image2.Width, image2.Height);
//image2.Picture.Bitmap.TransparentColor := clWhite;//비트맵 이외일 경우 제외
image2.Transparent := True;
image2.OnMouseDown := Image2MouseDown;
//그릴때
//색지정
Image2.Canvas.Brush.Color := clBlack;
Image2.Canvas.Pen.Color := clBlack;
Image2.Canvas.Rectangle(x,y,x+10,y+10);