|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Получить цвет пикселя (есть проблема)
Приветствую граждане
Пишу программку для распознавания скринов с игры. Игра - онлайн шутер. Скрины то я получаю а вот с распознаванием возникла сложность. Игра вроде работает через DirectDraw и имеет свою защиту. GetPixel при запущенной игре не работает и возвращает один цвет(видимо что то блочит). Может кто подскажет альтернативу GetPixel или еще какой способ обойти эту проблему т.к. в графике я ни как не шарю. Зарание спасибо. |
#2
|
||||
|
||||
Цитата:
|
#3
|
|||
|
|||
Bmp. Мне главное что бы делался скрин(любым способом) и я мог распознавать на нем пиксели. Остальное не важно, дальше уже разберусь.
Может как то по другому нужно выдергивать скрины? __________________________________ Bmp := Tbitmap.Create; Bmp.Height := HeightCF; Bmp.Width := WidthCF; DC := GetDC(Wnd); Bitblt(Bmp.Canvas.Handle, 0, 0, WidthCF, HeightCF, DC, 0, 0, SRCCOPY); _____________________________________ Если игруху закрыть то все норм, но смысл как раз в том что бы ее не закрывать. Последний раз редактировалось VoFF4eG, 31.10.2012 в 13:10. |
#4
|
||||
|
||||
Цитата:
Код:
var bmp: TBitmap; Color: TColor; begin Color := bmp.Canvas.Pixels[X, Y]; end; |
#5
|
|||
|
|||
Нет, то же самое что и при GetPixel
|
#6
|
|||
|
|||
Я так думаю что система защиты игры (античит) что то мутит(блокирует).
|
#7
|
||||
|
||||
Цитата:
Цитата:
|
#8
|
|||
|
|||
Дело в том, что скрины отлично сохраняются. Просто перед сохранением мне их обрабатывать нужно )
|
#9
|
||||
|
||||
Цитата:
Код:
procedure TForm1.Timer1Timer(Sender: TObject); var bmp: TBitmap; hw: HWND; Can: TCanvas; Color: TColor; R: TRect; begin Timer1.Enabled := False; bmp := TBitmap.Create; try Can := TCanvas.Create; hw := GetDesktopWindow; Can.Handle := GetDC(hw); if not GetWindowRect(hw, R) then begin ShowMessage(SysErrorMessage(GetLastError)); Exit; end; bmp.Width := R.Right - R.Left; bmp.Height := R.Bottom - R.Top; bmp.Canvas.CopyRect(Rect(0, 0, bmp.Width, bmp.Height), Can, R); Caption := 'Цвет пикселя: ' + IntToHex(bmp.Canvas.Pixels[100, 100], 8); finally bmp.Free; end; Beep; end; Естественно интервал в таймере нужно поставить достаточный для запуска игры. |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
VoFF4eG (01.11.2012)
|
#10
|
|||
|
|||
Благодарю за код. Буду пробовать. о результате отпишу.
|
#11
|
|||
|
|||
00000000 - вот и все что я получаю...
При чем как только игруху закрываю... сразу все работает ))) Ну и что это за фигня? Мысли будут? |
#12
|
|||
|
|||
Есть ли возможность как то защитить свою программу от внешних воздействий на нее?
|
#13
|
|||
|
|||
Удалил сообщение. (мой метод уже предлагали)
Последний раз редактировалось Anklav, 05.11.2012 в 17:14. |
#14
|
||||
|
||||
Цитата:
|
#15
|
|||
|
|||
Если на программу нет внешнего воздействия то почему происходит эта фигня??? Тупо не могу узнать цвет пикселя. возвращает нули и все. Хотя бы узнать в чем причина.
|