· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Скриншот

Посл.отвђт Сообщенiе


Дата: Июл 9, 2004 10:22:47

Извиняюсь за идиотский вопрос, но может кто подскажет, как
можно спомощью win32 api сделать снимок экрана и
полажить его в файл на диске. Желательно исходник на масме.
Заранее спасибо


Дата: Июл 9, 2004 11:20:36

art
Любого (dx, opengl) экрана?


Дата: Июл 9, 2004 17:26:38 · Поправил: vinnie_pooh

GetDIBits.
У меня есть пример, но он на 170 строк (TASM).


Дата: Июл 9, 2004 17:35:33

2 vinnie_pooh - Например q_q прально поставил вопрос - это смотря где!
Я давно не трогал ВинАЙПИ(2 Года) - но насколько помню просто скриншот можно сделать - если получить хендел чего то и через КопиРект копировать рисунок..


Дата: Июл 9, 2004 21:54:20

OK, скриншот рабочего стола Windows - GetDIBits.


Дата: Июл 10, 2004 11:27:02

Поясняю. Любого экрана(dx, opengl и т.д.).
В общем нужно в любой момент времени сделать банальный скриншот и положить его в файл. Но варианты типа нажать принтскрин, засунуть его пайнт и сохранить по
понятным причинам не подходят, т. к. сделать надо все програмно:)


Большая просьба к vinnie_pooh'у. Вышли пожалуйста, если не трудно свой исходник на family + собака + simbirsk + net

Всем спасибо за помощь.


Дата: Июл 10, 2004 15:40:49

А почему бы действительно не нажать PrintScreen? Функцией keybd_event, например. А потом взять картинку из буфера обмена


Дата: Июл 10, 2004 17:53:08

art
Выслал.


Дата: Июл 10, 2004 20:02:43

Спасибо. А нажать нельзя, т.к. рисунок попадает в буфер обмена, который затирать не хотелось-бы...


Дата: Июл 10, 2004 20:15:34

Посмотрел, то что нужно.
А можно путем изменения каках-то параметров в твоем исходнике регулировать качество картинки и, соответственно размер выходного файла?


Дата: Июл 11, 2004 11:52:46 · Поправил: vinnie_pooh

Можно. Вообще параметрами извлекаемых из DC данных управляет структура BITMAPINFOHEADER. Чтобы уменьшить выходной файл, нужно в поле biBitCount указать значение поменьше, например, 8. Тогда ты получишь 8-ми битный BMP.
Если качество картинки вообще не имеет значения, пиши 1 - монохромный BMP. Допустимые значения поля biBitCount: 1, 4, 8, 16, 24, 32.
Но! При разрядности <= 8 в BMP-файле сразу после BITMAPINFOHEADER-а находится цветовая палитра, а не данные картинки. Ее размер равен (1 << biBitCount)*3, т.е. при biBitCount == 1 размер палитры будет 6, а при
biBitCount == 8 - 768. Кроме того, меняется поле bfOffBits структуры BITMAPFILEHEADER, которое равно size BITMAPFILEHEADER + size BITMAPINFOHEADER + size Palette, и GetDIBits нужно вызывать с 1 в последнем параметре. Я пытался по-быстрому изменить свой пример для 8-битного BMP, но не вышло, может ты разберешься.


Дата: Июл 11, 2004 12:28:21

vinnie_pooh
„Ее размер равен (1 << biBitCount)*3“
На самом деле (1 << biBitCount)*4


Дата: Июл 11, 2004 23:56:05

Black_mirror
Да, я ошибся. 3 было в старых версиях BMP.


Дата: Июл 12, 2004 10:31:43

Спасибо, вроде разобрался...


Дата: Июл 13, 2004 08:18:47

может поможет
capgdi.asm любой сделает (Через GDI)
capture.asm через ddraw делает, и пока сделано только для 16-битных разрешений (5-6-5)

100268164__capture.zip


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.116