|
|
| Посл.отвђт | Сообщен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 |