Получить снимок экрана (screenshot)?!

Модератор: Модераторы

Получить снимок экрана (screenshot)?!

Сообщение Andreich » 02.03.2009 14:31:23

Вопрос : Требуется получить снимок экрана и сохранить его в файл на диске!

Ответ : 1
Среда : Lazarus
Операционная система : Windows, Linux
Зависимости : -
Источник : http://freepascal.ru/forum/viewtopic.php?f=5&t=3784
Теги : экран, рабочий стол, скриншот, screenshot

Код: Выделить всё
uses ..., LCLIntf, LCLType;

...

procedure TForm1.Button1Click(Sender: TObject);
var
  MyBitmap : TBitmap;
  ScreenDC : HDC;
begin
  MyBitmap:=TBitmap.Create;
  ScreenDC:=GetDC(0);
  MyBitmap.LoadFromDevice(ScreenDC);
  Image.Picture.Bitmap:=MyBitmap;
  MyBitmap.Free;
end;
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Получить снимок экрана (screenshot)?!

Сообщение mgant89 » 13.07.2011 15:18:00

Цель: сделать скриншот конкретного окна. Как это сделать?
я так понимаю что в строке "ScreenDC:=GetDC(0);" вместо 0 будит какой то идентификатор окна, снимок которого нужно получить. так?
Как это сделать? так чтоб оно кросплатформенно было?
mgant89
незнакомец
 
Сообщения: 1
Зарегистрирован: 13.07.2011 15:14:40

Re: Получить снимок экрана (screenshot)?!

Сообщение MageSlayer » 13.08.2011 15:15:04

Код: Выделить всё
procedure ScreenshotCapture(Form: TForm; Dest: TBitmap);
var
  ScreenDC: HDC;
  B:TBitmap;
  SrcRect, DestRect:TRect;
begin
  ScreenDC := WidgetSet.GetDC(0);
  try
    if Form = nil then
      begin
        Dest.LoadFromDevice(ScreenDC);
      end
      else
      begin
        B:=TBitmap.Create;
        try
          B.LoadFromDevice(ScreenDC);

          SrcRect:=Bounds(Form.Left, Form.Top, Form.Width, Form.Height);
          DestRect:=Bounds(0, 0, Form.Width, Form.Height);

          Dest.Width:=RectWidth(DestRect);
          Dest.Height:=RectHeight(DestRect);
          Dest.Canvas.CopyRect(DestRect, B.Canvas, SrcRect);
        finally
          B.Free;
        end;
      end;
  finally
    WidgetSet.ReleaseDC(0, ScreenDC);
  end;
end;


Работает и под Линуксом, и под Виндой.
MageSlayer
постоялец
 
Сообщения: 216
Зарегистрирован: 07.09.2006 12:30:44

Re: Получить снимок экрана (screenshot)?!

Сообщение Tango » 13.04.2015 11:34:24

Не работает, спрашивает что такое HDC?
А потом и GetDC(0).

Это я про то, как работает под Linux.
Аватара пользователя
Tango
постоялец
 
Сообщения: 156
Зарегистрирован: 31.05.2012 17:07:30

Re: Получить снимок экрана (screenshot)?!

Сообщение kazalex » 13.04.2015 14:17:59

Tango писал(а):Не работает, спрашивает что такое HDC?

uses ..., LCLIntf, LCLType;
kazalex
постоялец
 
Сообщения: 296
Зарегистрирован: 01.06.2012 14:54:10

Re: Получить снимок экрана (screenshot)?!

Сообщение Tango » 13.04.2015 17:36:51

Спасибо, я подумал что это сугубо виндовый тип.
Аватара пользователя
Tango
постоялец
 
Сообщения: 156
Зарегистрирован: 31.05.2012 17:07:30


Вернуться в Графика и мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru