Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Общие вопросы по .NET и C# > Сравнение попиксельно зоны раб. стола с указ. *bmp |
Автор: Travolta 27.11.2008, 12:04 |
День добрый. Мне надо сравнить заданную зону(область) рабочего стола попиксельно с указанным *.bmp файлом. Опишите пожалуйста алгоритм при котором можно произвести эту процедуру. Желатьно с использованием ключевых операторов. Спасибо. |
Автор: diadiavova 27.11.2008, 17:08 | ||
Можно создать битмап, скопировать в него нужную часть экрана и сравнивать попмксельно два битмапа Примерно так
И дальш bm сравнивать с образцом. Едимственная оговорка, при создании битмапа конструктор возможно прийдётся использовать другой, чтобы формат пикселя не отличался от от того, с которым картинка будет сравниваться. |
Автор: jonie 28.11.2008, 01:43 | ||
скорость сравнения в GDI+ будет ужасной... можно чуток ускорить.. варианты есть, например подсчет хеш суммы или игры с non-managed GDI.... вариант 2 (откуда-то честно сперт):
|
Автор: Travolta 28.11.2008, 11:43 |
diadiavova и jonie спасибо. я стормозил. пишу на VС++. jonie у меня BYTE *pLeftBits = new BYTE<BitmapInfoLeft.bmiHeader.biSizeImage>; эта строка и ей подобные выдаёт ошибку c:\documents and settings\duke\мои документы\visual studio projects\first2\first2.cpp(309): error C2446: '<' : no conversion from 'DWORD' to 'BYTE *' как быть? и ещё, извините за наглость, но всё же как скопировать зону экрана для данного случая ? |
Автор: jonie 30.11.2008, 02:13 | ||||
|
Автор: Travolta 30.11.2008, 19:09 |
ЭЭ. Так это ж вроде из кода, который ты привёл. |
Автор: Zakonnic 1.12.2008, 12:31 | ||
LockBits - штука как раз для таких случаев. Нууу... попробуйте создать отдельный проект с unsafe-методами и вставить что-то вроде этого:
Чтобы код скомпилился, в свойсвах проекта надо разрешить ансейф-код. Потом можно получить битмап способом diadiavova и сравнить его с вашим, вызвав bool result = Utils.MagicFeatures.CompareBmp(bmp1, bmp2, new Rectangle([координаты и размеры])); ЗЫ. Код скопирован и слегка подправлен - если в таком виде не работает... ну придумайте что нибудь ![]() |
Автор: Travolta 2.12.2008, 00:09 |
Zakonnic Спасибо тебе за уделённое время. Буду разбираться (для VC++) |