Не вывод графики,а захват изображения
Си знаю хорошо,С++ начал недавно, но программировать под Win32 да еще и графику..увы, опыта нет.Поэтому прошу помощи у более опытных,так как прочитал кучу литературы и окончательно запутался. Опишу суть задачи. Нужна программа, которая не нагружая ЦП может анализировать изображение,которое сейчас на дисплее.То есть не выводить графику, а наоборот считывать, какой цвет пикселов в заданной области. Нужно 2 области по краям дисплея на всю высоту, шириной окола ста пикселов, ориентировочно 100*1024 слева и такая же область справа. Нужно вычислить средний цвет.Все вычисления это не проблема.Вопрос в том, какими инструментами залезть в видеопамять и считать оттуда цвета пикселей? Вроде как я понял надо копать в сторону DirectX? Может сформулировал неясно-спросите-уточню. Но цель поставлена серьезная и буду разбираться полностью, подскажите-в каком направлении копать, и вообще возможно ли такое? Заранее всем спасибо, жду ответов!
P.S. И вообще. Браток, все ответы сводятся к указаниям ссылок, найденным гуглем. А если для разнообразия самому поискать, а? А уже потом, обратиться сюда с описанием конкретной проблемы. Типа, по коду вопросы, и т.д... И самому полезно, и народ ответит с бОльшим желанием, чем по такой постановке: "Хочу, но не могу. Давайте, рассказывайте..."
конечно я не сразу пошел писать сюда, несколько дней изучал большие объемы, ссылок были за сотню наверно, проблема моя в том, что я не могу понять в каком направлении копать, я же не прошу - дайте готовую прогу)) Собственно подробнее о назначении. Я делаю динамическую подсветку для монитора, по типу эмбилайт на филиповских телевизорах. с железом никаких проблем.Задача проги-отправить контроллеру пакет данных о среднем цвете слева, и с права. То есть нужно выбрать максимум цвета с левого края монитора и с правого, об остальном беспокоится микроконтроллер. И начал я рыть, и пошли DirectDraw, OpenGL, GUI и проч, и во всем этом я увяз. Вот и прошу-как залезть в видеопамять непосредственно просто взять оттуда данные о цвете, которые на мониторе. Еще попутно вопрос, винда выводит окошки вот, рабочий стол с помощью GUI? а игры например с помощью DirectX? или я просто не понимаю как устроена графика. Все что читал было узконаправленно и сложно.И везде только примеры с рисованием фигур, объектов...а мне нужно наоборот. На вас вся надежда, спасибо!))
opencv (open computer vision), в примерах к библиотеке есть то что ты ищешь, например захват видео и сохранение его в файл, обработка видео покадрово, построение гистограмм, применение эффектов.
обрати внимание на библиотеку
спасибо, ни раз о такой не слышал, почитал, посмотрел много примеров, как я понял это достаточно мощный инструмент, но преимущественно для обработки изображения и видео поступающего через камеру,сканер. А мне надо наоборот анализировать ту, которая на мониторе. И это надо проще реализовать, так чтобы не загружать ЦП. Мне сказали что через directx можно как то это сделать, но ничего путного не нашел(
Opengl я еще только начал изучать и специальных команд для вывода изображения из файла еще пока не знаю.Насчет drawpixels- тут я знаю только один способ-перевод цветов картинки в цвета opengl, их загрузка в массив пикселей и вывод с помощью drawpixels.Однако я еще не до конца понял как это делаетсяне люблю скатывать готовое без понимания,и этот способ просто не пришел мне в голову.Спасибо, попробую.А может вы знаете еще какой-нибудь способ прямого вывода изображения с помощью opengl?
Драйвер виртуального фреймбуфера писать бы не советовал с вашим уровнем подготовки
Цитата:
рабочий стол с помощью GUI? а игры например с помощью DirectX?
вы даже GUI с GDI пока путаете.
Начал ускоренный курс обучения)) Разобрался с окнами, менюшки, тест. До углубленного программировани графики еще не дошел, но думаю в скором времени все осилю. Все таки на С много писал, новое укладывается достаточно быстро. Понял как выводить графику в клиентскую область программы. А вот как вывести ее в другую область? Как я понял, Все что мы видим на мониторе как в фотошопе из слоев накладывается друг на друга, верно? Если так, то как получить доступ непосредственно ко всему видимому рабочему столу, а не только рисовать в окошке программы) Спасибо за терпение))
GetDC(0)