| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Звук, графика и видео > Проверка цвета определенного пикселя |
| Автор: Tokagero 17.8.2007, 14:30 |
| Суть в том чтоб делать скриншот раз в секунду гдето и проверять, если пиксель НЕ такого-то цвета тогда имитировать нажатие ф1 ... Создание для онлайн-игры програмки для автоматического использования зелий (проверка строки жизни)... Как проверить является ли пиксель нужного цвета? |
| Автор: Mikh@il 17.8.2007, 22:58 | ||||||
| Пиксель состоит из трех-каналов(для RGB-палитры), получи значения красного, зеленого и синего. Значения цвета канала от 0 до 255. Вот те пример
А вообще как я понял суть твоей проблемы тебе надо сравнивать твою картинку(полоску жизней) с полной полоской жизни (100%-здоровье), так есть решение проще, берешь считаешь к-во пикселей в твоей полоске (это делаешь один единственный раз), после чего когда твои жизни уменьшаются твои действия следующие: 1. Предположим в полоске уровень жизни обозначен красным цветом 2. Считаешь к-во красных пикселей 3. Полученный результат делишь на к-во пикселей во всей полоске (результат больше единицы быть не может, если еще и на 100% умножить то получишь процент здоровья, если он меньше 100 - то вливаешь в себе бутыль пива и закусываешь рыбкой и у тя опять 100% здоровья) Добавлено через 2 минуты и 44 секунды Пиксель состоит из трех-каналов(для RGB-палитры), получи значения красного, зеленого и синего. Значения цвета канала от 0 до 255. Вот те пример
А вообще как я понял суть твоей проблемы тебе надо сравнивать твою картинку(полоску жизней) с полной полоской жизни (100%-здоровье), так есть решение проще, берешь считаешь к-во пикселей в твоей п Добавлено через 2 минуты и 57 секунд Пиксель состоит из трех-каналов(для RGB-палитры), получи значения красного, зеленого и синего. Значения цвета канала от 0 до 255. Вот те пример
А вообще как я понял суть твоей проблемы тебе надо сравнивать твою картинку(полоску жизней) с полной полоской жизни (100%-здоровье), так есть решение проще, берешь считаешь к-во пикселей в твоей п |
| Автор: Tokagero 18.8.2007, 09:13 |
| Mikh@il, Большое спасибо но моя идея немного другая... Я проверяю только один пиксель полоски. Допустим, всего 100 жизней. А зелья восполняют 25. Я беру примерно 70-75ый пиксель и проверяю Если он такого-то (светлокрасного) цвета то ничего, а если она НЕ этого (темнокрасного, типа пустое) то тогда имитировать F1 (зелье)... Еще одна проблема - на скриншоте наверно цвета будут... не очень качественные и часто пиксели будут изза качества изображения иметь искаженный цвет |
| Автор: Mikh@il 18.8.2007, 09:56 |
| Tokagero - у тя на картинке очень красивые цифорки жизней, белые и ровненькие, я бы распозновал их. 1. Проведи бинаризацию, все что не белое будет черные, а все что белое останется белым, после чего выдели границы цифорок по вертикали (по горизонтали не надо, т.к. у тя цифры в одну строку), и сравни с эталоном (В эталон нарежь цифры из этой же картинки их всего будет - 10) Работать будет быстро, а погрешности никакой. |
| Автор: Tokagero 18.8.2007, 12:55 |
| Mikh@il, заманчиво но звучит сложно. Есть примеры? |
| Автор: Mikh@il 19.8.2007, 10:31 | ||||||||
| Если распознать сложно делай по пикселам. 1. Для простоты преобразуешь изо-ение в оттенки серого: Преобразование к оттенкам серого заключается в получении яркости каждой точки по известной формуле (Y:=0.3*R+0.59*G+0.11*B) и последующем копировании полученного значения во все три канала (R=G=B:=Y).
2. Проверяешь пикселы Берешь первую строку сканируешь и заносишь в массив
Вот и все! Добавлено через 2 минуты и 45 секунд Если распознать сложно делай по пикселам. 1. Для простоты преобразуешь изо-ение в оттенки серого: Преобразование к оттенкам серого заключается в получении яркости каждой точки по известной формуле (Y:=0.3*R+0.59*G+0.11*B) и последующем копировании полученного значения во все три канала (R=G=B:=Y).
2. Проверяешь пикселы Берешь первую строку сканируешь и заносишь в массив [code=delphi] Image1.Picture.Bitmap.PixelFormat:=PF24Bit; P:=Image1.Picture.Bitmap.ScanLine[0]; Добавлено через 2 минуты и 57 секунд Если распознать сложно делай по пикселам. 1. Для простоты преобразуешь изо-ение в оттенки серого: Преобразование к оттенкам серого заключается в получении яркости каждой точки по известной формуле (Y:=0.3*R+0.59*G+0.11*B) и последующем копировании полученного значения во все три канала (R=G=B:=Y).
2. Проверяешь пикселы Берешь первую строку сканируешь и заносишь в массив [code=delphi] Image1.Picture.Bitmap.PixelFormat:=PF24Bit; P:=Image1.Picture.Bitmap.ScanLine[0]; |
| Автор: pseud 21.8.2007, 10:07 | ||||
у компонента TCanvas есть такая пропертя:
вот и делай
|