Перейти к содержанию
Fire Monkey от А до Я
  • 0

Как сделать скриншот с TMediaPlyerControl, Windows


Alex7wrt

Вопрос

Собственно. Нашел эту тему : http://fire-monkey.ru/topic/391-kak-sdelat-skrinshot-s-tmediaplayercontrol/ Но реализация там не работает под современными редакциями FMX. Интересует, есть ли в FMX способ сделать скриншот под Windows.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Решил сделать скриншот всей формы, на которой растянут компонент TMediaPlayerControl. На основе http://fire-monkey.ru/topic/648-xe7-sozdanie-printscreenov-polnykh-i-chasti-ekranov/ и http://fire-monkey.ru/topic/492-windows-kak-zagruzit-hbitmap-v-tbitmap/

 

Получился такой код

procedure MakeWindowScreenShot;
var
  VCLBitmap: Vcl.Graphics.TBitmap;
  WindowRect: TRect;
  tmpStream: TMemoryStream;
begin
  VCLBitmap := Vcl.Graphics.TBitmap.Create;
  try
    tmpStream:= TMemoryStream.Create;
    WindowRect := Rect(0, 0, form5.Width, form5.Height);
    VCLBitmap.Width := WindowRect.Width;
    VCLBitmap.Height := WindowRect.Height;
    BitBlt(VCLBitmap.Canvas.Handle, WindowRect.Left, WindowRect.Top, WindowRect.Width, WindowRect.Height, 
    FMXHandletoHWND(form5.Handle), 0, 0, SRCCOPY);
    VCLBitmap.SaveToStream(tmpStream);
    form4.image1.bitmap.LoadFromStream(tmpStream);
  except
    VCLBitmap := nil;
  end;
  tmpStream.Free;
end;

Запускаю процедуру во время воспроизведения видео на Form5. Но в image1 на Form4 сохраняется пустой битмап белого цвета без видео, без ничего. Хотя даже фон на Form5 черный. Что я пропустил или не учел?

Изменено пользователем Alex7wrt
Ссылка на комментарий
  • 0

Нашел ошибку. Вот так работает:

procedure MakeWindowScreenShot;
var
  VCLBitmap: Vcl.Graphics.TBitmap;
  WindowRect: TRect;
  tmpStream: TMemoryStream;
  dc: HDC;
begin
  VCLBitmap := Vcl.Graphics.TBitmap.Create;
  dc := GetDc(FMXHandletoHWND(form5.Handle));
  try
    tmpStream:= TMemoryStream.Create;
    WindowRect:= Rect(0, 0, form5.Width, form5.Height);
    VCLBitmap.Width:= WindowRect.Width;
    VCLBitmap.Height:= WindowRect.Height;
    BitBlt(VCLBitmap.Canvas.Handle, WindowRect.Left, WindowRect.Top, WindowRect.Width, WindowRect.Height, dc, 0, 0, SRCCOPY);
    VCLBitmap.SaveToStream(tmpStream);
    tmpstream.Position:=0;
    form4.image1.bitmap.LoadFromStream(tmpStream);
  finally
    VCLBitmap.free;
    tmpStream.Free
  end;
end;
Изменено пользователем Alex7wrt
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...