Здравствуйте. Проблема заключается вот в чем, нужно получить цвета всех пикселей на экране максимально бысто где-то 30 раз в секунду. Сделал все через DirectDraw во первых недостаточно быстро ну и еще не определялись цвета после запуска полноэкранных приложений(игр). Есть ли другие способы решения моей проблемы, сейчас пробую через Direct3D, что-то не как не разберусь в последовательности получения указателя на начало картинки. Помогите пожалуйста. Заранее спасибо)
Здравствуйте, blpunish, Вы писали:
B>Здравствуйте. Проблема заключается вот в чем, нужно получить цвета всех пикселей на экране максимально бысто где-то 30 раз в секунду. Сделал все через DirectDraw во первых недостаточно быстро ну и еще не определялись цвета после запуска полноэкранных приложений(игр). Есть ли другие способы решения моей проблемы, сейчас пробую через Direct3D, что-то не как не разберусь в последовательности получения указателя на начало картинки. Помогите пожалуйста. Заранее спасибо)
Читать из видеопамяти на PC — это очень медленно. Ничего не поможет.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, McSeem2, Вы писали:
MS>Здравствуйте, blpunish, Вы писали:
B>>Здравствуйте. Проблема заключается вот в чем, нужно получить цвета всех пикселей на экране максимально бысто где-то 30 раз в секунду. Сделал все через DirectDraw во первых недостаточно быстро ну и еще не определялись цвета после запуска полноэкранных приложений(игр). Есть ли другие способы решения моей проблемы, сейчас пробую через Direct3D, что-то не как не разберусь в последовательности получения указателя на начало картинки. Помогите пожалуйста. Заранее спасибо)
MS>Читать из видеопамяти на PC — это очень медленно. Ничего не поможет.
Fraps же даже в файл умудряется сохранять... если скорости диска хватает под такой fps.
Здравствуйте, blpunish, Вы писали:
b> Здравствуйте. Проблема заключается вот в чем, нужно получить цвета всех пикселей на экране максимально бысто где-то 30 раз в секунду. Сделал все через DirectDraw во первых недостаточно быстро ну и еще не определялись цвета после запуска полноэкранных приложений(игр). Есть ли другие способы решения моей проблемы, сейчас пробую через Direct3D, что-то не как не разберусь в последовательности получения указателя на начало картинки. Помогите пожалуйста. Заранее спасибо)
Нашел библиотеки madCollection вроде там есть функции перехвата чужого полноэкранного приложения, пока не пробывал. Может кто сталкивался?
Re[3]: Быстрое получение доступа к видеопамяти
От:
Аноним
Дата:
01.03.11 07:23
Оценка:
Здравствуйте, blpunish, Вы писали:
B>Нашел библиотеки madCollection вроде там есть функции перехвата чужого полноэкранного приложения, пока не пробывал. Может кто сталкивался?
скорость перехвата из видеопамяти в любом случае ограничена железом. быстро на запись, медленно (очень!) на чтение.
другой вопрос, что этой медленности может и быть достаточно, зависит от задач. для захвата простого офисного десктопа может оказаться и достаточно, а для трансляции чемпионата по CS — нет.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, blpunish, Вы писали:
B>>Нашел библиотеки madCollection вроде там есть функции перехвата чужого полноэкранного приложения, пока не пробывал. Может кто сталкивался?
А>скорость перехвата из видеопамяти в любом случае ограничена железом. быстро на запись, медленно (очень!) на чтение. А>другой вопрос, что этой медленности может и быть достаточно, зависит от задач. для захвата простого офисного десктопа может оказаться и достаточно, а для трансляции чемпионата по CS — нет.
А>в общем, критерии быстроты в студию.
В обшем мне нужна скорость не заметная глазом человека, даже чуть быстрее где-то 24-30 раз в секунду
Здравствуйте, blpunish, Вы писали:
B>Проблема заключается вот в чем, нужно получить цвета всех пикселей на экране максимально бысто где-то 30 раз в секунду. Сделал все через DirectDraw во первых недостаточно быстро ну и еще не определялись цвета после запуска полноэкранных приложений(игр). Есть ли другие способы решения моей проблемы, сейчас пробую через Direct3D, что-то не как не разберусь в последовательности получения указателя на начало картинки. B>В обшем мне нужна скорость не заметная глазом человека, даже чуть быстрее где-то 24-30 раз в секунду
По поводу скорости.
Установи себе на компы RemoteAdministrator ver 3.x. Включи на 1-ой машинке RAServer, а на второй запусти RAClient и приконнектись к серверу.
При этом можно заметить, что на 1-ой машинке скорость отрисовки GUI контролов упала. А упала из-за того, что RAServer работает как драйвер фильтр. Т.е. вся работа винды с GUI частью осуществляется через RAServer.
Это самый быстрый способ "получения цвета всех пикселей", но и самый сложный.
По поводу возможной реализации.
Начиная с висты видео изображение может напрямую "уходить" на видео-устройство, минуя GDI.
Для корректного снятия скриншота с приложения (не с экрана целиком) нужно в этом приложении хучить функции, через которые и производится отрисовка (или смена буферов).
Глянуть как это делается можно в след. источниках:
1) Taksi http://taksi.sourceforge.net
Практически аналог fraps'а. Перехват осуществляется уже в работающем приложении.
Поддерживает перехват: OpenGL, Direct3D 8, Direct3D 9.
2) .kkapture http://www.farb-rausch.de/~fg/kkapture/
Глядя на сурцы, перехват осуществляется при помощи MS Detours и производится в момент старта приложения (это минус).
Во время старта приложения он в хукает Direct***Create*** получает указатели на нужные интерфейсы.
Имеются какието хитрые оптимизации по скорости получения снимков.
Поддерживает перехват: OpenGL, все версии DirectDraw (до 7 версии), Direct3D 8, Direct3D 9.