Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как скопировать экран (или его часть) в TBitmap

Delphi , ОС и Железо , Монитор и Экран

Как скопировать экран (или его часть) в TBitmap

Например, с помощью WinAPI так -


var
  bmp: TBitmap;
  DC: HDC;
begin
  bmp:=TBitmap.Create;
  bmp.Height:=Screen.Height;
  bmp.Width:=Screen.Width;
  DC:=GetDC(0);  //Дескpиптоp экpана
  bitblt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,
    DC, 0, 0, SRCCOPY);
  bmp.SaveToFile('Screen.bmp');
  ReleaseDC(0, DC);
end;

Или с помощью обертки TCanvas -

Объект Screen[.width,height] - размеры


Var
  Desktop: TCanvas ;
  BitMap: TBitMap;
begin
  DesktopCanvas:=TCanvas.Create;
  DesktopCanvas.Handle:=GetDC(Hwnd_Desktop);
  BitMap := TBitMap.Create;
  BitMap.Width := Screen.Width;
  BitMap.Height:=Screen.Height;
  Bitmap.Canvas.CopyRect(Bitmap.Canvas.ClipRect,
  DesktopCanvas, DesktopCanvas.ClipRect);
  ........
end;

Программисты!

Вы абсолютно правы в том, что первый пример использует функции WinAPI GetDC и BitBlt, чтобы скопировать экран на TBitmap. Второй пример использует обёртку TCanvas вокруг окна рабочего стола.

Вот некоторые альтернативные решения:

1. Использование метода LoadFromDevice класса TBitmap

var
  bmp: TBitmap;
begin
  bmp := TBitmap.Create;
  bmp.LoadFromDevice(0, 0, Screen.Width, Screen.Height);
  // Сохраните битмап в файл или используйте его по мере необходимости
end;

Метод более компактен и эффективен, чем использование GetDC и BitBlt.

2. Использование метода CopyFromScreen класса TCanvas

var
  Desktop: TCanvas;
  BitMap: TBitmap;
begin
  Desktop := TCanvas.Create;
  Desktop.Handle := GetDC(0);
  BitMap := TBitmap.Create;
  BitMap.Width := Screen.Width;
  BitMap.Height := Screen.Height;
  Desktop.CopyFromScreen(BitMap.Canvas, 0, 0);
  // Сохраните битмап в файл или используйте его по мере необходимости
end;

Метод похож на второй пример, который вы предоставили, но использует CopyFromScreen вместо ручного управления канвасом.

3. Использование третьей-сторонней библиотеки Если вы ищете более полное решение, можно рассмотреть использование библиотеки,such as SynEdit's SynCommons unit, которая предоставляет функции для захвата снимков экрана и манипуляции битмапами.

Например:

uses
  SynCommons;

var
  bmp: TBitmap;
begin
  bmp := TBitmap.Create;
  CaptureScreen(bmp.Canvas, 0, 0, Screen.Width, Screen.Height);
  // Сохраните битмап в файл или используйте его по мере необходимости
end;

Надеюсь, это поможет! Пожалуйста, дайте мне знать, если у вас есть какие-либо дальнейшие вопросы.

В статье описаны два способа скопировать экран (или его часть) в TBitmap: с помощью WinAPI и с помощью обертки TCanvas.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Монитор и Экран ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-05 19:02:28/0.0060858726501465/0