Q&A

  • 이미지 박스에 보이는 그대로를 저장하기
이미지 박스에 그림을 불러 들일 때 stretch:=true로 하면 이미지가 이미지 박스의 크기에 맞추어 크기가 조정되잖아요.

문제는 이렇게 크기가 조정이 되어 보여지는 상태를 그대로 파일로 저장하려고 합니다.

크기와 상태 그대로...



그리고 또 한가지는 만일 그 상태로 저장할 수 있는 방법이 없다면 화면 캡쳐 형식을 취할려고 합니다. 그런데 문제는 이미지 콤포넌트의 스크린 상의 위치를 알 수 없다는 겁니다. 만일 스크린 상의 위치를 알고 있으면 스크린 상에서 원하는 영역의 그림만 캡쳐해서 저장하면 위에서 얘기한 것과 동일한 효과를 가질 수 있을 텐데..



아시는 분 계시면 부탁^^



2  COMMENTS
  • Profile
    홍성락 2001.09.26 06:04
    박종만 wrote:

    > 이미지 박스에 그림을 불러 들일 때 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;

  • Profile
    박종만 2001.09.27 05:20