Перейти к содержанию
  • 0
Pax Beach

Direct3D. Работа со снимками экрана

Вопросы

 

Библиотека для работы с изображениями находится здесь.

 

Готовится описание.

 

Поделиться сообщением


Ссылка на сообщение

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

Ответы на этот вопрос пока отсутствуют

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

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

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

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

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

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

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

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


  • Похожий контент

    • От Pax Beach
      Мне нужно сделать снимок экрана из своего приложения в приложении DirectX (в игре).
      По-быстрому накидал приложение, исходники здесь: MakeScreenshot-Forum.zip

      1. по нажатию единственной кнопки будет выполнена серия из 16 снимков экрана. Если запущен Скайп, то фотографироваться будет содержимое его окна.
      2. По нажатии CTRL+ALT+F9 будет сделан единичный снимок
      3. Label внизу показывает сколько миллисекунд затрачено на вывод снимка
      4. В комментах так же вы найдете, как работать со снимками через буфер обмена.
       
      Работа выполняется через GetDC(NULL);
      Windows 10 x64. Снимки делаются. И DirectX тоже нормально фотографируется.
      НО! только в оконных приложениях.
      Если приложение DirectX полноэкранное, то на всех снимках одна и та же картинка с первого снимка.
      То есть изменение буфера экрана в приложении ни как не отражается на снимках.
       
      Что нужно? Необходимо делать снимки конкретного приложения через интерфейс DirectX, а точнее, я так понимаю, через DirectShow. Тогда не будет разницы в окне оно или на полный экран.
      Помогите плиз, знающие люди, с решением этой задачи.
      Гарантирую вам от сообщества большой почет, от меня огромный респект, если это принесет доход, то еще и очень приятный бонус.
       
      Ссылки теме:
      1. DIRECTX FOR DELPHI
      2. unofficial version of DelphiX
      3. DirectX для начинающих
      4. MinHook - The Minimalistic x86/x64 API Hooking Library
      5. Various methods for capturing the screen
      6. Вывод графики на рабочий стол Windows с использованием оверлеев DirectX
      7. Project JEDI
      8. Реализация перехвата вызовов API — исчерпывающе про внедрение DLL, если разобраться, + это на Delphi
      UPD:
      9. Серия видео уроков Пишем D3D-хук — все понятно, только в Delphi перенести нужно.
      UPD 2:
      Научился рисовать в Direct3D и ловить интерфейс IDirect3DDevice9. Теперь делаю DLL ловушку для реализации снимков.
       
    • От Pax Beach
      Привожу пример готового FMX приложения, которое рисует на форме с помощью интерфейса IDirect3DDevice9.
      В примере реализован вызов анонимного метода Present() интерфейса IDirect3DDevice9, имея ссылку на интерфейс и порядковый номер метода.
      Данная реализация пригодится при установке ловушек (Hooks).
       
      Вкратце, суть реализации такая:
      Объявляю процедурный тип нужного метода
      type   TPresent9 = function(pSourceRect, pDestRect: PRect; hDestWindowOverride: HWND; pDirtyRegion: PRgnData): HResult of object; stdcall; Объявляю переменную этого типа
      var   PPresent: TPresent9; begin   ...   IntRefToMethPtr(d3d9Dev, PPresent, 17);   PPresent(nil, nil, DParametrs.D3DPP.hDeviceWindow, nil); Реализую процедуру получения метода интерфейса по номеру
      procedure IntRefToMethPtr(const IntRef; var MethPtr; MethNo: Integer); type   TVtable  = array [0 .. 999] of Pointer;   PVtable  = ^TVtable;   PPVtable = ^PVtable; begin   // QI=0, AddRef=1, Release=2, etc   TMethod(MethPtr).Code := PPVtable(IntRef)^^[MethNo];   TMethod(MethPtr).Data := Pointer(IntRef); end; А теперь получаем метод интерфейса по его порядковому номеру и вызываем его
        IntRefToMethPtr(d3d9Dev, PPresent, 17);   PPresent(nil, nil, DParametrs.D3DPP.hDeviceWindow, nil); Благодарю за оценку этого решения на StackOverflow.
       
      Скачать пример: D3DDemo.zip
    • От Vitaldj
      Коллеги, писал пост ранее на похожую тему, а воз и ныне там. Сегодня опять гром среди ясного неба. Написал пользователь программы, говорит, что при запуске ошибка. У него windows vista. Вот скрин:

      Написана, естественно в берлине. Кроме как обновить дрова видеокарты и directX я не нашел, что пописать пользователю.
      Естественно вопрос в аудиторию:
      1) Что это за ошибка?
      2) Как с ней бороться?
      3) Какие вещи нужно обновлять в windows, для исправление этой ошибки?
      Вроде сказано и мы это обсуждали, что выпилили только windows XP, а остальное осталось. Эта ошибка в viste, до этого поста была в windows 7!!! Который я тоже так и не решил!
      Помогите кто чем сможет, не комильфо это, декларировать поддержку операционной системы, а ее нет((
    • От Вячеслав
      Господа, озадачился вопросом получения скриншота формы. Статью Ярослава прочитал, разобрался, но в ней описан метод получения скриншота произвольного контрола с помощью метода PainTo. У формы же этот метод иной, поэтому возникли затруднения.
  • Последние посетители   0 пользователей онлайн

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

×
×
  • Создать...