Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2010, 16:53   #1
snow_max
 
Регистрация: 06.02.2010
Сообщений: 3
По умолчанию Нужно ускорить GetPixel

Задача:

Снимать screenshot окна и распознавать изображения на нем. Время критично, т.к. делать это нужно часто, и окон может быть много.

Текущее решение:

HDC hdcWnd = GetWindowDC(hWnd);
HDC newDC = CreateCompatibleDC(hdcWnd);
HBITMAP bmp = CreateCompatibleBitmap(hdcWnd,imgWi dth,imgHeight);
SelectObject(newDC,bmp);
ReleaseDC(hWnd,hdcWnd);
BOOL getWndResult = PrintWindow(hWnd,newDC,0);

Далее происходит получение RGB методом GetPixel(newDC,x,y) по всему скриншоту и анализ изоображения.

Проблема:

Необходимо ускорить программу. Профилировка показала, что 90% времени занимает метод GetPixel.

Вопрос: можно ли как-то ускорить получение цвета точек?
snow_max вне форума Ответить с цитированием
Старый 06.02.2010, 17:35   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

CreateCompatibleBitmap меняем на CreateDIBSection и получаем указатель на биты. Задача решена.
BOBAH13 вне форума Ответить с цитированием
Старый 06.02.2010, 17:49   #3
snow_max
 
Регистрация: 06.02.2010
Сообщений: 3
По умолчанию

Спасибо. А можно уточнить ответ куском кода, который от CreateDIBSection приходит к RGB цвету в точке x,y?
snow_max вне форума Ответить с цитированием
Старый 06.02.2010, 18:18   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

1. MSDN - ищем описание функции там
2. В результате получаем scan0 - указатель на биты.
3. Как ни странно Pixel(x, y) = scan0 + ((height - 1 - y) * width + x) * pixelSize

Тяжело не так ли ?

p.s. так же внизу страницы есть информация по подобным темам
BOBAH13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
2 компа чтобы ускорить 1 hammer.325 Компьютерное железо 5 20.01.2010 12:21
ускорить работу макроса borik120 Microsoft Office Excel 12 19.01.2010 17:25
Pixels[][] или GetPixel(hdc,x,y) Nick0 C++ Builder 5 12.12.2009 16:09
Как ускорить расчеты формул??? Иванов_ДМ Microsoft Office Excel 7 02.09.2009 09:53
Как ускорить программу ? juan666777 Общие вопросы Delphi 2 02.05.2009 19:48