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

Сохранение изображения экрана в файле (2)

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

Code:

program ScrShop;
 
uses
Windows;
 
procedure ApiScrCapture(FileName: String);
type
  TScr = array [0..1] of Byte;
  PScr = ^TScr;
var
  hBmp       : hBitmap;
  DeskDC     : hDC;
  DC         : hDC;
  BFH        : BITMAPFILEHEADER;
  BIH        : tagBITMAPINFO;
  ScrX, ScrY : Integer;
  F          : File;
  ScrSize    : Cardinal;
  Bits       : PScr;
begin
  SCRX     := GetSystemMetrics(SM_CXSCREEN);
  SCRY     := GetSystemMetrics(SM_CYSCREEN);
  ScrSize  := ScrX * ScrY * 3;
 
  GetMem(Bits, ScrSize);
 
  DeskDC   := GetDC(0);
  hBmp     := CreateCompatibleBitmap(DeskDC, ScrX, ScrY);
  DC       := CreateCompatibleDC(DeskDC);
 
  SelectObject(DC, hbmp);
  BitBlt(DC, 0, 0, SCRX, SCRY, DeskDC, 0, 0, SrcCopy);
 
 with BFH do
 begin
    bfType      := $4D42;
    bfSize      := SCRX * SCRY * 3 + SizeOf(BFH) + SizeOf(BIH);
    bfReserved1 := 0;
    bfReserved2 := 0;
    bfOffBits   := SizeOf(BFH) + SizeOf(BIH);
 end;
 
 with BIH.bmiHeader do
 begin
   biSize         := sizeof(BIH);
   biWidth        := SCRX;
   biHeight       := SCRY;
   biPlanes       := 1;
   biBitCount     := 24;
   biCompression  := BI_RGB;
   biSizeImage    := ScrSize;
   biClrImportant := 0;
 end;
 
  GetDiBits(DC, hbmp, 0, SCRY, Bits, BIH, DIB_RGB_COLORS);
  DeleteObject(hbmp);
  AssignFile(F, FileName);
  Rewrite(F, 1);
  Blockwrite(F, BFH, SizeOf(BFH));
  Blockwrite(F, BIH, SizeOf(BIH));
  Blockwrite(F, bits^, ScrSize);
  CloseFile(F);
  FreeMem(Bits);
end;
 
begin
  ApiScrCapture('1.bmp');
end.
Автор: Arazel
Взято из http://forum.sources.ru

Программа на Delphi, которая захватывает экран и сохраняет его в виде файла bitmap. Вот разбивка кода:

Процедура ApiScrCapture принимает параметр FileName, который является именем файла, где будет сохранена захваченная картинка.

  1. Она получает метрики системы для размера экрана с помощью GetSystemMetrics.
  2. Она выделяет память для массива байтов, чтобы хранить данные захваченной картинки.
  3. Она создает контекст устройства (DC) и битмап (hBmp), совместимые с DC рабочего стола.
  4. Она выбирает битмап в DC, выполняет операцию BitBlt для захвата экрана, а затем освобождает ресурсы.
  5. Она создает структуру BITMAPFILEHEADER и заполняет ее информацией о формате файла.
  6. Она создает структуру tagBITMAPINFO и заполняет ее информацией о данных картинки.
  7. Она получает биты захваченной картинки с помощью GetDiBits.
  8. Она пишет заголовок файла, заголовок информации о битмапе и данные картинки в файл с помощью BlockWrite.
  9. Наконец, она закрывает файл и освобождает память.

Основной программный код просто вызывает процедуру ApiScrCapture с именем файла '1.bmp'.

Вот некоторые предложения по улучшению:

  • Код использует магические числа ($4D42, 24, и т.д.), которые можно определить как константы.
  • Процедуры AssignFile, Rewrite и CloseFile можно заменить более современными функциями ввода-вывода, такими как TFileStream.
  • Процедура BlockWrite можно заменить подходом потокового ввода-вывода для записи данных файла.
  • Код не обрабатывает ошибки или исключения. Лучше добавить обработку ошибок с помощью блоков try-except.

В целом, код прямолинен и легко понятен. Однако некоторые функции и процедуры можно рефакторить для улучшения поддерживаемости и производительности.

Программа на языке Delphi для сохранения изображения экрана в файле BMP.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-08-31 13:09:59/0.0032329559326172/0