Q&A

  • 어느 특정부분을 캡쳐받아 저장하는법-매우급함
안녕하세요...

다시 찾게 되었습니다.

어느 특정 부분을 캡쳐받아 저장하려고 합니다. (폼의 위치는 언제든지 바뀔수 있음.)

제가 작업한 소스는 다음과 같습니다.



var

Source: TComponent;

DeskTopDC: Hwnd;

image4Canvas: TCanvas;

BitmapRect: TRect;

Bitmap: TBitmap;

x,y,z,a : integer;

begin

if (check = 1) and (image1.Visible = true) then begin

x := albumform3.width - (albumform3.width - (image1.Width + image1.Left));//left

y := AlbumForm3.Height - (albumform3.height -(image1.top + image1.Height));//top

z := image1.left;

a := image1.top;



end

else begin

x := AlbumForm3.width - (albumform3.width - (image4.Width + image4.Left));//left

y := AlbumForm3.Height - (albumform3.height -(image4.top + image4.Height));//top

z := image4.left;

a := image4.top;

end;



try

Bitmap := TBitmap.Create; {BMP를 저장할 bitmap 생성}

BitMap.Width := Screen.Width;

BitMap.Height := Screen.Height;

// BitmapRect := Rect(100, 0, image4.Width, image4.Height); {full screen 영역}





BitmapRect := Rect(x,y,z,a);





{전체 window의 device context(DC) 을 얻는다}





image4Canvas := TCanvas.Create;

image4Canvas.Handle := GetDeviceContext(desktopdc);//GetDeviceContext(DeskTopDC);





// BitmapRect영역의 DeskTopCanvas에서 BitmapRect영역의 Bitmap.Canvas로

// 복사받습니다

Bitmap.Canvas.CopyRect(BitmapRect, image4Canvas, BitmapRect);

bitmap.SaveToFile('c:졸업작품user'+'이미지'+inttostr(filelistbox3.Items.Count+1)+'.bmp');

showmessage('저장되었습니다.');

check := 0;

AlbumForm2.showmodal;

finally

ReleaseDC(GetDeskTopWindow, DeskTopDC);

image4Canvas.Free;

Bitmap.Free;

end;



1  COMMENTS
  • Profile
    이정욱 1999.10.25 19:53
    참고하세요.



    var

    DesktopHWnd : HWnd;

    DesktopDC : HDC;

    TempBitmap : TBitmap;

    begin

    DesktopHWnd := GetDesktopWindow;

    DesktopDC := GetDC(DesktopHWnd);

    TempBitmap := TBitmap.Create;

    TempBitmap.Width := 500;

    TempBitmap.Height := 300;

    BitBlt (

    TempBitmap.Canvas.Handle,

    0,

    0,

    TempBitmap.Width,

    TempBitmap.Height,

    DesktopDC,

    10,

    50,

    SRCCOPY

    ); //일부분을 가져옵니다.



    TempBitmap.SaveToFile('c:졸업작품user'+'이미지x.bmp');

    ReleaseDC(DesktopHwnd, DesktopDC);

    TempBitmap.Free;

    end;



    음.. 온라인상에서 작성한 코드라 정확할지는 모르지만 위와 같습니다.

    CopyRect보다는 BitBlt가 더 빠른게 동작하죠.

    도움이 되셨기를...



    고혜정 wrote:

    > 안녕하세요...

    > 다시 찾게 되었습니다.

    > 어느 특정 부분을 캡쳐받아 저장하려고 합니다. (폼의 위치는 언제든지 바뀔수 있음.)

    > 제가 작업한 소스는 다음과 같습니다.

    >

    > var

    > Source: TComponent;

    > DeskTopDC: Hwnd;

    > image4Canvas: TCanvas;

    > BitmapRect: TRect;

    > Bitmap: TBitmap;

    > x,y,z,a : integer;

    > begin

    > if (check = 1) and (image1.Visible = true) then begin

    > x := albumform3.width - (albumform3.width - (image1.Width + image1.Left));//left

    > y := AlbumForm3.Height - (albumform3.height -(image1.top + image1.Height));//top

    > z := image1.left;

    > a := image1.top;

    >

    > end

    > else begin

    > x := AlbumForm3.width - (albumform3.width - (image4.Width + image4.Left));//left

    > y := AlbumForm3.Height - (albumform3.height -(image4.top + image4.Height));//top

    > z := image4.left;

    > a := image4.top;

    > end;

    >

    > try

    > Bitmap := TBitmap.Create; {BMP를 저장할 bitmap 생성}

    > BitMap.Width := Screen.Width;

    > BitMap.Height := Screen.Height;

    > // BitmapRect := Rect(100, 0, image4.Width, image4.Height); {full screen 영역}

    >

    >

    > BitmapRect := Rect(x,y,z,a);

    >

    >

    > {전체 window의 device context(DC) 을 얻는다}

    >

    >

    > image4Canvas := TCanvas.Create;

    > image4Canvas.Handle := GetDeviceContext(desktopdc);//GetDeviceContext(DeskTopDC);

    >

    >

    > // BitmapRect영역의 DeskTopCanvas에서 BitmapRect영역의 Bitmap.Canvas로

    > // 복사받습니다

    > Bitmap.Canvas.CopyRect(BitmapRect, image4Canvas, BitmapRect);

    > bitmap.SaveToFile('c:졸업작품user'+'이미지'+inttostr(filelistbox3.Items.Count+1)+'.bmp');

    > showmessage('저장되었습니다.');

    > check := 0;

    > AlbumForm2.showmodal;

    > finally

    > ReleaseDC(GetDeskTopWindow, DeskTopDC);

    > image4Canvas.Free;

    > Bitmap.Free;

    > end;

    >