![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| CWD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 26.11.2011 Репутация: нет Всего: нет |
Здравствуйте нашел в сети кусок кода который должен наводить курсор, на пиксель определенного цвета. Но возникла некая проблема не совсем понятно почему оно не работает. Как я понял программа переводит изображение с Рабочего стола, в массив пикселей формата (r,g,b,a).
Не совсем понятно что нужно вписать вместо дескриптора исходного DC, screen. (BitBlt(hdcTemp, bx/2, by/2, MAX_WIDTH, MAX_HEIGHT, screen, 0, 0, SRCCOPY);) Компилирую под VS 2010.
|
|||
|
||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: 1 Всего: 5 |
Переменная hdc не используется. Может она и есть screen?
|
|||
|
||||
| CWD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 26.11.2011 Репутация: нет Всего: нет |
leniviy, Я тоже так думал и тестировал вариант такой BitBlt(hdcTemp, 100, 100, MAX_WIDTH, MAX_HEIGHT, hdc, 0, 0, SRCCOPY);
получил "Unhandled exception at 0x00411545 in FindPixelByCursor.exe: 0xC0000005: Access violation reading location 0x00000000." |
|||
|
||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: 1 Всего: 5 |
BitBlt должен заполнять буфер, но он у тебя не заполняется.
Попробуй взять пример отсюда: http://it-talk.org/topic2646.html Он тоже кривой, но буфер, по крайней мере, заполняется. В качестве параметра попробуй GetDesktopWindow(), а не HWND_DESKTOP |
|||
|
||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: 1 Всего: 5 |
Что это? Зачем заполнять только середину своего битмапа? Это сообщение отредактировал(а) leniviy - 19.8.2012, 15:54 Присоединённый файл ( Кол-во скачиваний: 13 )
bbb.png 38,70 Kb |
|||
|
||||
| CWD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 26.11.2011 Репутация: нет Всего: нет |
Получилось копировать буфер в bitPointer, но он получается какого-то не очень адекватного размера.
Это сообщение отредактировал(а) CWD - 19.8.2012, 16:00 |
|||
|
||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: 1 Всего: 5 |
А какой размер нужен? С теми параметрами, которые у тебя были изначально, у тебя было вот такое изображение в буфере: http://forum.vingrad.ru/act-Attach/type/post/id-2512388.html Значит размер массива - x*y*(24/8); Я так и не понял, какой параметр овечает за выбор между 24- и 32-битным изображением. |
|||
|
||||
| CWD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 26.11.2011 Репутация: нет Всего: нет |
leniviy, Ну просто теперь хотелось бы наводить курсор на пиксель нужно цвета. Но это не выходит с помощью того когда который есть, потому что bitPointer, состоит и 3332 ячеек. И почему именно 3332 светит я тоже не понимаю.
|
|||
|
||||
| leniviy |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: 1 Всего: 5 |
Починил твою программу. Объяснять тяжело, но работает
Я её немного переделал. Теперь она не кликает, а только обводит курсором красные точки в пределах квадрата 100x100 . И сохраняет изображение aaa.bmp в папку с программой.
Добавлено через 1 минуту и 14 секунд Что было починено: - неправильно вычислялись координаты точки - байты идут не в порядке rgba, а в порядке bgra Добавлено через 4 минуты и 8 секунд
так получается по диагонали. Надо было считать y как частное от деления на MAX_WIDTH, а x как остаток от этого деления Добавлено через 8 минут и 5 секунд ччч Присоединённый файл ( Кол-во скачиваний: 12 )
red.png 0,14 Kb |
||||
|
|||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: 1 Всего: 5 |
Тебе надо открыть вот этот файл: http://forum.vingrad.ru/act-Attach/type/post/id-2512402.html
и поместить его в левый верхний угол экрана, как на Это сообщение отредактировал(а) leniviy - 19.8.2012, 17:26 Присоединённый файл ( Кол-во скачиваний: 11 )
aaa.png 8,77 Kb |
|||
|
||||
| CWD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 26.11.2011 Репутация: нет Всего: нет |
leniviy, Спасибо. Буду разбираться.
|
|||
|
||||
| CWD |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 26.11.2011 Репутация: нет Всего: нет |
Возникла небольшая идея переписать функцию как класс. Но что-то ничего не получается.
stdafx.cpp
stdafx.h
Постоянно выдает ошибку error C2065: 'bitPointer' : undeclared identifier.. Описать переменную в файле h тоже не получается. Буду благодарен если подскажете почему. Спасибо. Это сообщение отредактировал(а) CWD - 22.8.2012, 10:40 |
||||
|
|||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: 1 Всего: 5 |
убери "BYTE* bitPointer;" из функции init() и раскоментируй "//BYTE* bitPointer;" в .h файле
и добавь
вначале .h файла Это сообщение отредактировал(а) leniviy - 22.8.2012, 10:51 |
|||
|
||||
| CWD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 26.11.2011 Репутация: нет Всего: нет |
Спасибо. Модифицировал функцию ClickPixel(Красный, Зеленый,Синий,Кордината Х, Коодината Y), которая в идеале должна была бы проверить цвет точки в координатах и вернуть значение типа true false. При смене цвета точки программа в лучшем случае вылетает. Не могу разобраться почему.
|
|||
|
||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: 1 Всего: 5 |
Я думаю, просто память кончается.
У тебя Sleep() только если находит, поэтому он успевает сделать кучу скриншотов, а bitPointer надо освобождать после использования. |
|||
|
||||
| CWD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 26.11.2011 Репутация: нет Всего: нет |
leniviy, Спасибо!!!!
|
|||
|
||||
| CWD |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 26.11.2011 Репутация: нет Всего: нет |
leniviy, А вот ещё возник вопрос, возможно ли использовать вместо.
выражение
Это сообщение отредактировал(а) CWD - 23.8.2012, 00:08 |
||||
|
|||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: 1 Всего: 5 |
нет. Надо читать документацию к CreateDIBSection. Там должно быть написано, как освобождать память.
Это сообщение отредактировал(а) leniviy - 23.8.2012, 07:47 |
|||
|
||||
| CWD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 26.11.2011 Репутация: нет Всего: нет |
Но утечка продолжается. Это сообщение отредактировал(а) CWD - 24.8.2012, 10:31 |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
а bmpDC кто будет удалять? -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| CWD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 26.11.2011 Репутация: нет Всего: нет |
Проблема решена.
Это сообщение отредактировал(а) CWD - 24.8.2012, 10:45 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |