이미지 박스에 그림을 불러 들일 때 stretch:=true로 하면 이미지가 이미지 박스의 크기에 맞추어 크기가 조정되잖아요.
문제는 이렇게 크기가 조정이 되어 보여지는 상태를 그대로 파일로 저장하려고 합니다.
크기와 상태 그대로...
그리고 또 한가지는 만일 그 상태로 저장할 수 있는 방법이 없다면 화면 캡쳐 형식을 취할려고 합니다. 그런데 문제는 이미지 콤포넌트의 스크린 상의 위치를 알 수 없다는 겁니다. 만일 스크린 상의 위치를 알고 있으면 스크린 상에서 원하는 영역의 그림만 캡쳐해서 저장하면 위에서 얘기한 것과 동일한 효과를 가질 수 있을 텐데..
아시는 분 계시면 부탁^^
> 이미지 박스에 그림을 불러 들일 때 stretch:=true로 하면 이미지가 이미지 박스의 크기에 맞추어 크기가 조정되잖아요.
> 문제는 이렇게 크기가 조정이 되어 보여지는 상태를 그대로 파일로 저장하려고 합니다.
> 크기와 상태 그대로...
>
> 그리고 또 한가지는 만일 그 상태로 저장할 수 있는 방법이 없다면 화면 캡쳐 형식을 취할려고 합니다. 그런데 문제는 이미지 콤포넌트의 스크린 상의 위치를 알 수 없다는 겁니다. 만일 스크린 상의 위치를 알고 있으면 스크린 상에서 원하는 영역의 그림만 캡쳐해서 저장하면 위에서 얘기한 것과 동일한 효과를 가질 수 있을 텐데..
>
> 아시는 분 계시면 부탁^^
//////////////////////////////////////////////////////////////
그냥 단순하게요 이미지박스의 위치를 부모 컴포넌트를 반복으로 찾아 구하는겁니다.
이미지2를 사용했는데 이미지2을 안보이게 감추거나 TBitmap등을 생성후 해보세요.
아래 예를 2개들었는데요 이미지 화질이 틀린데요.
----------------------------------------------------------------
procedure TForm1.BitBtn1Click(Sender: TObject);
var
S_Rect, T_Rect : TRect;
yy, xx : integer;
CParent: TWinControl;
begin
//Image1의 부모컴포넌트들을 찾아 화면상위치를 알아낸다.
yy := 0;
xx := 0;
CParent := Image1.Parent;
while (CParent <> Form1) do begin
yy := yy + CParent.Top;
xx := xx + CParent.Left;
CParent := CParent.Parent;
end;
yy := yy + Image1.Top;
xx := xx + Image1.Left;
S_Rect := Rect(xx,yy,xx+Image1.Width,yy+Image2.Height);
T_Rect := Rect(0,0,Image2.Width,Image2.Height);
Image2.Width := Image1.Width;
Image2.Height:= Image1.Height;
image2.Canvas.Brush.Color := clWhite;
Image2.Canvas.CopyRect(T_Rect,Form1.Canvas,S_Rect);
Image2.Picture.SaveToFile('c:temp2.bmp');
end;
--------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
S_Rect, T_Rect : TRect;
begin
image3.Canvas.Brush.Color := clWhite;
S_Rect := Image1.Canvas.ClipRect;
T_Rect := Rect(0,0,Image3.Width,Image3.Height);
Image3.Canvas.CopyRect(T_Rect,Form1.Image1.Canvas,S_Rect);
Image3.Picture.SaveToFile('c:temp1.bmp');
end;