Как сделать скриншот рабочего стола Windows без фонового изображения
Приветствую! В данной статье мы рассмотрим, как можно сделать скриншот всего рабочего стола Windows без фонового изображения, что может быть полезно при регистрации ошибок в программном обеспечении или для других целей, где важно сохранить конфиденциальность фонового изображения пользователя. Мы будем использовать Object Pascal (Delphi) для написания кода, который позволит нам достичь желаемого результата.
Проблема и её решение
Пользователь столкнулся с необходимостью сделать скриншот рабочего стола без фонового изображения, чтобы сжать создаваемое видео и уменьшить размер файла. Фоновое изображение увеличивает размер файла, поэтому его удаление является ключевым для улучшения сжатия, особенно при сохранении видео в формате AVI.
Шаги для решения задачи
Определение активных окон: Для начала необходимо определить все активные окна на рабочем столе, чтобы в дальнейшем исключить их фон из скриншота.
Исключение фонового изображения: После определения активных окон, можно заполнить фон вокруг них цветом, отличным от фонового изображения рабочего стола, тем самым маскируя его.
Создание скриншота: Сделать скриншот всего рабочего стола с примененной маской.
Сохранение в виде sequence of shots как AVI: Используя полученные изображения, записать их в виде AVI, что уменьшит размер файла за счет исключения фонового изображения.
Пример кода на Object Pascal
// Код для определения активных окон и создания маски
procedure RemoveBackground(ASnapshot: TBitmap; AMonitor: TMonitor);
var
e: TAppRects;
c: TColor;
begin
e := nil;
try
e := TAppRects.Create(AMonitor);
c := ASnapshot.Canvas.Brush.Color;
ASnapshot.Canvas.Brush.Color := $FEA249; // Задаем цвет для фона, отличный от фонового
e.FillBackground(ASnapshot, e.Monitor.WorkareaRect);
ASnapshot.Canvas.Brush.Color := c;
finally
e.free;
end;
end;
// Код для записи AVI из последовательности скриншотов
procedure TfrmSnapshot.RecordFrame;
begin
TakeSnapshot; // Получаем скриншот в формате BMP
Avi.AppendNewFrame(Bmp.Handle); // Добавляем новый кадр в AVI
end;
Важные замечания
При использовании данного метода необходимо убедиться, что пользователь осведомлен о том, что его рабочий стол будет записан, и дать ему возможность отказаться от этой операции.
Для создания маски и исключения фонового изображения используется алгоритм, который определяет активные области экрана и закрашивает их фон.
Несмотря на то, что фоновое изображение исключается, некоторые элементы могут остаться невидимыми для пользователя, но записываемыми как черные (например, если они совпадают с выбранным фоновым цветом).
Используя эти шаги, вы сможете выполнить задачу по созданию скриншота рабочего стола без фонового изображения в программах на Delphi.
Как сделать скриншот рабочего стола Windows без фонового изображения, используя Object Pascal для исключения фоновой картинки из видео.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS