|
8 / 8 / 1
Регистрация: 11.08.2012
Сообщений: 112
|
|
Сделать скриншот экрана / копировать экранную область видеопамяти20.01.2013, 18:32. Показов 21893. Ответов 24
Метки нет (Все метки)
Доброго времени суток. Для работы программы необходимо получить копию(скриншот) экрана, с запущенным directX приложением (собственно скриншот самого приложения и надо получить). Проблема в том, что трогать само directX приложение (получить хендл и прочее) нельзя.
Собственно вопрос - с помощью чего можно реализовать эту функцию, при этом получить максимальное быстродействие (получать копию экрана необходимо не реже 4-х раз в секунду, при этом необходимо его успевать обрабатывать)? Экзотические варианты типа написания собственного драйвера не подойдут))) Заранее спасибо. PS Будет ли программа делать скриншот всего экрана, или только приложения - не принципиально, главное скорость + нормальный скрин directX пиложения.
0
|
|
| 20.01.2013, 18:32 | |
|
Ответы с готовыми решениями:
24
Как сделать скриншот, получая данные непосредственно из видеопамяти. как сделать экранную форму большую, чем размер экрана?
|
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
| 20.01.2013, 18:44 | |
|
ну если средствами winapi, то можно попробовать тупо взять dc экрана и скопировать куда-нибудь к себе.
HDC hScreenDc = GetDC(NULL); потом какой-нибудь BitBlt Если известны координаты и размер нужного окна, то из контекста можно выборочно копировать лишь нужный регион. На счет скорости - хз. Нужно пробовать. Если другими либами, то в них наверняка есть для этого спец средства.
0
|
|
|
8 / 8 / 1
Регистрация: 11.08.2012
Сообщений: 112
|
||
| 20.01.2013, 18:50 [ТС] | ||
|
А нет какого нибудь прямого способа копирования видимой области видеопамяти, без нарушения качества выводимой картинки?
0
|
||
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
| 20.01.2013, 18:54 | |
|
на счет directX - это я не знаю. пробовать нужно.
как может пострадать качество я не понимаю. моник скажем 1000 на 1000. копируем эти самые пиксели. куда что тут может ухудшиться? короче, быстрее будет попробовать, чем рассуждать. еще можно попробовать такой вариант, без писанины. нажать PrintScreen и скопировать в пэинт то, что получилось. эсли копируется - значит можно эмулировать эти нажатия и потом забирать из буфера содержимое.
1
|
|
|
8 / 8 / 1
Регистрация: 11.08.2012
Сообщений: 112
|
||
| 20.01.2013, 19:03 [ТС] | ||
|
Кстати, использование ddraw вместо BitBlt не более быстрая альтернатива?
0
|
||
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
| 20.01.2013, 19:09 | |
|
это нужно замерять или знать подробности реализации того и другого. я к сожалению не знаю ничего
0
|
|
|
8 / 8 / 1
Регистрация: 11.08.2012
Сообщений: 112
|
|
| 20.01.2013, 21:14 [ТС] | |
|
С BitBlt буду пробовать завтра - послезавтра.
Может еще кто какие варианты знает? Желательно с примерами.
0
|
|
|
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
|
|
| 21.01.2013, 10:52 | |
|
2
|
|
|
8 / 8 / 1
Регистрация: 11.08.2012
Сообщений: 112
|
|||||||||||
| 22.01.2013, 18:16 [ТС] | |||||||||||
|
schdub, а по вашему мнению, какой способ более быстрым будет?
Добавлено через 4 часа 30 минут Взял пример из ссылке выше, скомпилировал, программа компилируется, но вылетает с ошибкой. По инглишу я не шпрехаю, на русскоязычных форумах практически никакой информации не нашел, кто может подсказать в чем дело?
Видимо необходимо инициализировать еще что то, но вот что? Добавлено через 17 часов 1 минуту В примере сказано, что g_pd3dDevice является объектом IDirect3DDevice9, который необходимо правильно инициализировать. А вот кто ни будь может подсказать, как в данном случае его инициализировать то? Добавлено через 1 час 54 минуты Ура товарищи, все заработало. Вот полный код:
0
|
|||||||||||
|
MЫW
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
|
|
| 16.04.2013, 23:16 | |
|
Ermak, попробовал повторить скрин, пока скринил рабочий стол было нормально. Попробовал заскринить содержимое игры вылетела AccessViolationException. Скриню библиотекой вызываемой через C#, но ошибка как я понял из-за того что игра пытается защититься от внешних воздействий. Я что-то не так понял или надо обходить защиту?
0
|
|
|
5 / 5 / 5
Регистрация: 26.02.2012
Сообщений: 51
|
|
| 16.04.2013, 23:24 | |
|
phantom96, конечно бред, но все-таки: может студия запущена не в режиме администратора?
0
|
|
|
MЫW
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
|
|
| 16.04.2013, 23:34 | |
|
Я и без студии пробовал) Перевёл игру в оконный режим заскринилась, полноэкранный и опять вылет.
Добавлено через 7 минут Как вообще происходит событие скрина когда человек нажимает на printscreen? BitBlt, direct? В какую сторону копать чтобы повторить действия клавиши?
0
|
|
|
8 / 8 / 1
Регистрация: 11.08.2012
Сообщений: 112
|
|||
| 19.04.2013, 21:39 [ТС] | |||
|
Добавлено через 7 минут
0
|
|||
|
MЫW
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
|
|
| 20.04.2013, 02:20 | |
|
У меня руки ну совсем кривые не покажете что и куда брать?)
Добавлено через 1 минуту Кстати в самом коде fail 3 проходит. Добавлено через 1 минуту Вы уж простите за такие глупые вопросы, я в этом коде вообще ничего не понимаю. На С++ пытаюсь что-то сделать т.к. на C# с этим вообще туго будет. Хочу дллку скринящую потом просто импортить в C#... Добавлено через 53 минуты Буду оооочень благодарен если кто-то всё-таки поможет...( У меня голова уже гудит от этих примеров срининга. Столько всего поскачивал с codeproject'а. Всё заваливается на полном экране. Самый большой успех пока у Taxi recorder, и тот с выключенным сглаживанием. Не заставлять же всех сглаживание вырубать...(
0
|
|
|
8 / 8 / 1
Регистрация: 11.08.2012
Сообщений: 112
|
||
| 20.04.2013, 20:21 [ТС] | ||
|
Вот тут есть довольно неплохое описание на русском, собственно с помощью которого я и разобрался. Можно наверное сначала поиграться со структурой d3dpp (описание ее есть по ссылке приведенной выше). Как получить хендл окна - есть полно тем в интернете (помойму даже попадались темы на этом форуме). Также возможно не совпадают разрешение рабочего стола, и разрешение игры. Добавлено через 8 минут Если неважна скорость, может быть действительно проще эмулировать нажатие PrtScr и из буфера обмена выдерать скрин?
0
|
||
|
MЫW
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
|
|
| 20.04.2013, 22:08 | |
|
Сейчас так и выдерается...( Проблема в другом заключается. В Win7 нужно включить сглаживание при включённом Aero чтобы скрин не чёрным был)))
Добавлено через 2 минуты Скорость мне не особо важна. Хоть 30 секунд на файл, но пока успехи нулевые... Либо включённые аеро и сглаживание и принтскрин либо выключенные аеро и сглаживание и SlimDX.
0
|
|
|
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 53
|
||||||||||||
| 22.07.2013, 14:46 | ||||||||||||
|
в общем нужен минималистичный способ "снять" все пиксели с экрана... я так понял без подключения
#include <d3d9.h> #include <d3dx9tex.h> будут черные квадраты? или как-то можно обойти... то есть такой вариант не подходит да...
Добавлено через 17 минут подскажите, где тут ошибка...
кстати #include <d3dx9tex.h> #pragma comment(lib,"d3dx9.lib") у меня визуал студия не может найти. а ошибка следующая: "неразрешенный внешний символ void * pBits" кстати, а что если у юзера всетаки BITSPERPIXEL не 32? что тогда будет? и как вычислить это значение...
0
|
||||||||||||
|
MЫW
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
|
|
| 22.07.2013, 17:23 | |
|
time123, включить сглаживание нужно в приложении с которого скрин делается, либо выключить аеро через WinAPI.
0
|
|
|
8 / 8 / 1
Регистрация: 11.08.2012
Сообщений: 112
|
||||||||
| 22.07.2013, 21:40 [ТС] | ||||||||
|
Добавлено через 5 минут Вот кусок кода, делал бота для онлайн игры
0
|
||||||||
|
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 53
|
||||||
| 30.07.2013, 16:18 | ||||||
|
насчет моего кода, там проблема в pBits, extern убрал, подскажите, как правильно выделить именно необходимое кол-во памяти? ну то есть необходимо узнать на сколько байтов pBits будет ссылаться. и если потом преобразовать в char* это дело, ничего страшного не произойдет, так ведь?)
и еще, посоветуйте пожалуйста, как можно эти данные с указателя pBits на жесткий диск скинуть в файл test.bmp чтобы проверить, все ли работает... Добавлено через 15 часов 26 минут такой вопрос, есть фукнция для создания скриншота
0
|
||||||
| 30.07.2013, 16:18 | |
|
Помогаю со студенческими работами здесь
20
Как сделать скриншот экрана? Не могу сделать скриншот экрана Как сделать скриншот экрана? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|