안녕하세요...
다시 찾게 되었습니다.
어느 특정 부분을 캡쳐받아 저장하려고 합니다. (폼의 위치는 언제든지 바뀔수 있음.)
제가 작업한 소스는 다음과 같습니다.
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;
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;
>