Q&A

  • 현재 컴퓨터의 화면을 원하는 크기로 캡쳐를 받으려고 하는데...
현재 화면을 원하는 크기(100,70)로 매 초 마다 캡쳐를 받으려고 합니다.
그런데, 아래의 방식으로 하면 9x 계열을 OS 에서는 무리없이 돌아가는 것 같은데
nt 게열의 OS 에서는 마우스가 버벅거리는 현상이 발생합니다.
(타이머 혹은 쓰레드 방식으로 모두 해 보았음.)

아래의 방식말고 다른 방법의 캡쳐방식이 또 있는지 고수님들의 조언을 부탁드립니다.

procedure TForm1.Button1Click(Sender: TObject);
var
  DeskTopDC:     HDc;
  DeskTopCanvas: TCanvas;
  DeskTopRect:   TRect;
  BitmapRect:    TRect;
  Bitmap:        TBitmap;
begin
  Bitmap := TBitmap.Create;
  try
    BitMap.Width  := 100;  BitMap.Height := 70;
    BitmapRect    := Rect(0, 0, 100, 70);
    DeskTopDC     := GetWindowDC(GetDeskTopWindow);
    DeskTopCanvas := TCanvas.Create;
    try
      DeskTopCanvas.Handle := DeskTopDC;
      DeskTopRect := Rect(0, 0, Screen.Width, Screen.Height);
      Bitmap.Canvas.CopyRect(BitmapRect,
                             DeskTopCanvas,
                             DeskTopRect);
      Image1.Picture.Assign(Bitmap);
    finally
      ReleaseDC(GetDeskTopWindow, DeskTopDC);
      DeskTopCanvas.Free;
    end;
  finally
    Bitmap.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Bmp  : TBitmap;
begin
  Bmp := TBitmap.Create;
  try
    Bmp.Width  := 100;  Bmp.Height := 70;
    StretchBlt(Bmp.Canvas.Handle,
               0, 0,
               Bmp.Width, Bmp.Height,
               GetDC(0),
               0, 0,
               Screen.Width, Screen.Height,
               SRCCOPY);
   Image1.Picture.Assign(Bmp);
  finally
    Bmp.Free;
  end;
end;

TImage.Canvas.StretchDraw() 의 방법을 이용해서 캡쳐 후 축소도 해보았는데 마찬가지임.
0  COMMENTS