Всем привет! У меня может быть необычный вопрос, хотя 50% его процентов наверняка уже задавалась... Каким образом можно получить изображение, которое на мониторе в данный момент? Интересует два способа: 1.Программный, т.е. не обращаясь к самому монитору(т.е. что должно быть на экране) 2.Аппаратный, т.е. обращаясь к монитору, как к устройству(т.е. непосредственное изображение на устройстве) Есть надумки или варианты?
pikador 1. ... 2. ... Под какую ОС? 2.Аппаратный, т.е. обращаясь к монитору, как к устройству Про чтение видеопамяти знаю, но стобы читать _из_ монитора не слышал.
Вынь ХП Знаю только то что можно считать программно(наверно до того как вынь передает все монику) и напрямую(наверно через порты ввода\ввыода) .... А как именно не знаю...
Вроде устраивает, ток в масме что надо подключить для функций: extern CreateDC@16:NEAR extern GetPixel@12:NEAR extern DeleteDC@4:NEAR Ну и до кучи: extern PlaySound@12:NEAR
pikador считать программно(наверно до того как вынь передает все монику) Шутишь? 1 апреля уже прошло. Изображение хранится (разумеется, пока питание есть) в видеопамяти и "постоянно" передается на монитор. extern GetPixel@12:NEAR Читать попиксельно - это не дело. Win GDI содержит функции оперирующие блоками.
pikador Шутишь, наверное, на монитор подается: 1) с аналогового выхода (VGA) передается два сигнала синхронизации, на смену строки и смену кадра, и три аналоговых сигнала сигнала (на красную, синюю и зеленую пушку) определяющие цвет и яркость текущего пиксела 2) если есть цифровой выход (DVI), то те же сигналы синхронизации + аналоговый сигнал разложенный на цифровые составляющие (т.е. N градаций красного, N градаций синего, N зеленого) + дополнительные управляющие сигналы прогоняются через кодер и востанавливаются на стороне монитора декодером Хочешь подменять изображение, делай это в видеопамяти, иначе нельзя
=) тебе потребуются CreateCompatibleDC, CreateCompatibleBitmap, BitBlt (кажется). Пример снимки скриншота есть в MSDN, ищи. Зачем? Лучше юзать документированные средства, описанные в MSDN, чем что-либо другое
я не понимаю, зачем ему проигрывать звук для снятия скриншота. если ктонибудь объяснит мне роль PlaySound в получении изображения, буду очень благодарен ))))
=)))))) Мда....)) На самом деле, все что я говорю имеет очень глубокий смысл. Раскрывать который я не буду, а как сделаю может и выложу тут, но такого в паблике нет и небыло никогда...))) Про звук и видео карты, это разные темы))) Ржу немогу... Отлично, посмотрю(кста линк не кинешь?), этот способ зачетный, подходит.... И еще вопрос: Ммм..... Каким макаром можно придумать перехват этих аналоговых сигналов каждый кадр? Пусть даже мы получим все не цветах на пиксель, устроит даже напряжение....
pikador Ну ты блин даешь... На видеокарте есть технологический разъем, цепляй к нему осцилограф и мерь, (только видюху не сожги, а то скажешь потом, что не предупредили) всё равно ты получаешь то, что у тебя видеобуфер в цикле выводит на экран. Адрес видеобуфера начинается с 0A0000h по 0BFFFFh. Доступ к полному объему видеобуфера идет через переключение страниц по 64k. Разбирайся с VESA, плюс придется разбираться с драйвером конкретно твоей видеокарты. В общем, потянуло тебя не в ту степь, но раз уж просишь
чтобы получить картинку десктопа (она тебе нужна для скринсейвера?), копать в сторону: Код (Text): GetDesktopWindow LockWindowUpdate GetClientRect GetDCEx CreateDIBSection
Я понимаю, что ото может выглядеть тупо, но есть еще способ помимо битблт. ВОООООБЩЕ без функций винды, эт на уровне ядра, напрямую как то можно получить....
Чувак, тебе ясно сказали: BitBlt. Без функций винды это ты как себе представляешь? Писать в видеопамять (о чем тебе не раз говорили)? Тогда пиши драйвер. Только его тоже надо загружать с помощью любимых функций винды. Да и драйвер будет не на 10 строк, а раз эдак в 50 побольше. Можно без драйвера, но это будет еще сложнее (раза в 3). Оно тебе это надо? Если просто разукрашивать пиксели, то и виндовый GDI сгодится. Ну а если ты выводишь анимацию взрыва ядерной бомбы, то это уже лучше DirectX/OpenGL использовать.
пишешь драйвер, который мапирует физический адрес начала видеобуфера к тебе в адресное пространство и херачишь его. только это геморрой тот еще. не ищи себе проблем на свои вторые девяносто )