![]() |
|
![]() ![]() ![]() |
|
shedon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1209 Регистрация: 17.1.2003 Где: Нижнiй Новгородъ Репутация: нет Всего: 11 |
сабж собственно, вобщем хочу получить скриншот напрямую из видеобуфера.
-------------------- Programming is like sex: One mistake and you have to support it your lifetime |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
Нормально... в каком видеорежиме? или его еще определить надо? под какой ОС? или вообще платформонезависимо? на каком железе? или для всех мыслимых?
Добавлено @ 14:42 а так - сэмулировать нажатие PrintScreen и перехватить вывод на печать (это под ДОСом... под Виндой вытянуть содержимое клипборды) ![]() Это сообщение отредактировал(а) Akina - 27.9.2004, 14:43 -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
shedon |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1209 Регистрация: 17.1.2003 Где: Нижнiй Новгородъ Репутация: нет Всего: 11 |
это не подходит
в любом, Win98/2k/XP/2k3, на любом железе -------------------- Programming is like sex: One mistake and you have to support it your lifetime |
||||
|
|||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 2 Всего: 34 |
ну так в виндосе, в ддраве, в опенжль ?
там во всех 3х случаях по разному будет -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
shedon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1209 Регистрация: 17.1.2003 Где: Нижнiй Новгородъ Репутация: нет Всего: 11 |
oleg1973
В виндосе.... -------------------- Programming is like sex: One mistake and you have to support it your lifetime |
|||
|
||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 2 Всего: 34 |
1 HDC handle нада
2 сделать компатибиле контекст 3 битблит туда ну и все -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
shedon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1209 Регистрация: 17.1.2003 Где: Нижнiй Новгородъ Репутация: нет Всего: 11 |
oleg1973
Этот способ не работает, при получение скриншота фильмов. -------------------- Programming is like sex: One mistake and you have to support it your lifetime |
|||
|
||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 2 Всего: 34 |
shedon
там наверняка через директ драв кино крутят из другого процесса нада подумать... -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
shedon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1209 Регистрация: 17.1.2003 Где: Нижнiй Новгородъ Репутация: нет Всего: 11 |
Ну дак я в начале и спросил, как напрямую сграбить изображение из видеобуфера...
-------------------- Programming is like sex: One mistake and you have to support it your lifetime |
|||
|
||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 2 Всего: 34 |
ну из своего процесса не проблема
а вот с чужого... а проги есть такого типа? я грабилки тока дектопа видел -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
Victorier |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 16.10.2004 Репутация: нет Всего: нет |
А нельзя прочитать память B800:xxxx?
|
|||
|
||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 2 Всего: 34 |
в досе можно
в виндосе нет -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: нет Всего: 112 |
Для проигрывания фильмов иногда или даже часто используются оверлеи (Overlay Mixer в Direct Show).
Для проверки - запусти фильм и нажми PrintScreen. Далее запусти Paint (но фильм не закрывай и окно проигрывателя лучше не двигать), жми в нём Ctrl-V (вставить из буфера) - и прямо в Paint'е будет просматриваться фильм ![]() Возможно, повозившись с DirectDraw/DirectShow ты сможешь легально достать содержимое оверлеев, но я пробовал скриншотить фильмы с помощью HyperSnap-DX4 и CaptureSolution, которые якобы грабят и DirectX-овые игры и видеофильмы... Но эффект - как от обычного PrintScreen'а... ЗЫ: возможно, я ошибаюсь ![]() Это сообщение отредактировал(а) p0s0l - 17.10.2004, 15:55 -------------------- С уважением, г-н Посол. |
|||
|
||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 2 Всего: 34 |
остается вариант написания драйвера для непосредственного чтения из видеопамяти
-------------------- SST 465555 icq 200-512-712 |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: нет Всего: 112 |
oleg1973, а как ты узнаешь, в какой области видеопамяти хранится содержимое оверлея ? И какой области экрана этот оверлей соответствует ?
Чем писать драйвер, имхо, легче сделать так, чтобы проигрыватели не могли использовать оверлеи - их максимальное количество ограничено, и если одна прога юзает оверлей, то другая уже не сможет ;) У меня, к примеру, видяха GF5600 держит максимум 1 оверлей - если запустить 2 проигрывателя, то второй уже будет нормально скриншотиться... -------------------- С уважением, г-н Посол. |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: нет Всего: 112 |
Кстати, я тут посмотрел, похоже к видеопамяти есть прямой доступ без всяких прибамбасов.
В директдраве у PrimarySurface делаем Lock ( + можно сразу же Unlock), при этом получаем адрес сурфейса. Этот адрес соответсвует базовому адресу видеопамяти (очень похоже на это). Читайте и пишите туда наздоровье, как говорится, только против оверлеев это не спасёт... -------------------- С уважением, г-н Посол. |
|||
|
||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 2 Всего: 34 |
Neo! оверлеев не бывает
![]() есть видеокарта и линейный кусок видепамяти адресс его находится елементарно далее найдя адр начала , логично предположить что достаточно скопировать к примеру 1024*768*3 байт чтоб получить копию LFB которая будет являтся непосредственной частью видео памяти которую мы видим на экране, внеэкранная нас в данный момент не интересует -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 2 Всего: 34 |
p0s0l
совершенно верно при lock получаем адрес на видеопамять но тут есть нюанс ddraw позволяет делать эмуляцию в оперативе, если к примеру мала видеопамяти а нам нада 10 бэкбуферов, оно будет в оперативе хотя в принципе на результат не повлеяет осталось тока залесть в чужой процесс и сделать оттуда lock ![]() предлагаю написать враппер ddraw.dll который по нажатию там каких нить кнопок будет шкрин грабить ![]() -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
p0s0l |
|
||||||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: нет Всего: 112 |
Можно тогда просто создать любой малюсенный сурфейс в видеопамяти (в dwCaps указав DDSCAPS_VIDEOMEMORY), делаем Lock, получаем адрес сурфейса, далее VirtualQuery выдаст базовый адрес региона (AllocationBase), то бишь начало видеопамяти.
Объясни почему ? Откуда такая уверенность ? Загляни в настройки видеопроигрывателя и ты скорее всего найдешь метод вывода. Например, в Zoom Player: Standart Renderer, Overlay Mixer, Video Mixing Renderer (VMR9). Если выставишь Overlay Mixer (а он выставлен по умолчанию), то при проигрывании фильма PrintScreen будет снимать вместо фильма черноту.
Проигрыватель закрашивает всю клиентскую область окна ключевым цветом оверлея, DirectShow рендерит фильм не на окно проигрывателя, а на невидимый оверлейный сурфейс. Поэтому и в куске видеопамяти, выводимой на экран, хранится только КЛЮЧЕВОЙ ЦВЕТ на месте оверлея, а то, что должно выводится вместо этого ключевого цвета (кадр фильма к примеру), тоже хранится в видеопамяти, но уже в другом куске памяти, и это и есть оверлей. Я себе представляют так: видяха при выводе на монитор читает последовательно видеопамять. Если есть хотя бы один видимый оверлей, она проверяет, входит ли выводимый пиксел в область оверлея, если да, то еще проверят, является ли считанный пиксел ключевым цветом, и если является, то вместо него выводит соотвествующий пиксел оверлея... -------------------- С уважением, г-н Посол. |
||||||||
|
|||||||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 2 Всего: 34 |
p0s0l
шас как тока будет свободная минутка попробую сделать грабилку, (ddraw.dll wrapper) -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: нет Всего: 112 |
oleg1973, почитай, главное выделено, из MSDN:
Т.е. если хочешь делать грабилку, то придётся грабить как ПримариСурфейс, так и Оверлейный Сурфейс... -------------------- С уважением, г-н Посол. |
|||
|
||||
RuslanB |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 21.10.2004 Репутация: нет Всего: нет |
Вы мое спасенье!!!
![]() |
|||
|
||||
Byo |
|
|||
Unregistered |
Нефиг спорить ))
p0s0l абсолютно прав . так что удачи в поисках ). |
|||
|
||||
JoyEx |
|
|||
![]() Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: нет Всего: 12 |
Касательно Win!!!
![]() Лучше всего иметь у себя PRM (Programmer's Reference Manual) на свою видяху. Например, http://www.intel.com/design/chipsets/manuals/29823701.pdf и затем работать напрямую А если по-умному, то лучше изучить архитектуру работы дисплея и делать драйверок. p0s0l, с Днем Варенья тебя! Это сообщение отредактировал(а) JoyEx - 3.12.2005, 20:02 -------------------- Если ты уже никого не боишься, значит ты самый страшный |
|||
|
||||
JoyEx |
|
|||
![]() Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: нет Всего: 12 |
И потом, напрямую адрес (>0x80000000) видеопамяти получить можно, а вот вычислить внеэкранную будет намного сложнее. Еще можно вспомнить об основных VGA регистрах, чтобы попытаться сделать что-то нехорошое с видяхой.
-------------------- Если ты уже никого не боишься, значит ты самый страшный |
|||
|
||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 2 Всего: 34 |
ну если в досе все делать то там можно получить данные о установленом видеорежиме и в том же массиве есть адрес (линейный) видеобуффера -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
JoyEx |
|
|||
![]() Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: нет Всего: 12 |
oleg1973
ДА. shedon Через HDC проще всего сделать и потом сразу забыть о проблеме. В DVD самое ценное это меню, а через видяху DVD-менюшку не сграбить. Если тебе нужно типа VHS, то тогда дерзай! -------------------- Если ты уже никого не боишься, значит ты самый страшный |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm для Windows/DOS" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для Windows/Dos | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |