Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.10.2012, 12:28
VoFF4eG VoFF4eG вне форума
Прохожий
 
Регистрация: 26.10.2012
Сообщения: 27
Репутация: 10
Сообщение Получить цвет пикселя (есть проблема)

Приветствую граждане
Пишу программку для распознавания скринов с игры. Игра - онлайн шутер. Скрины то я получаю а вот с распознаванием возникла сложность. Игра вроде работает через DirectDraw и имеет свою защиту. GetPixel при запущенной игре не работает и возвращает один цвет(видимо что то блочит). Может кто подскажет альтернативу GetPixel или еще какой способ обойти эту проблему т.к. в графике я ни как не шарю. Зарание спасибо.
Ответить с цитированием
  #2  
Старый 31.10.2012, 12:58
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от VoFF4eG
Пишу программку для распознавания скринов с игры. Игра - онлайн шутер. Скрины то я получаю а вот с распознаванием возникла сложность. Игра вроде работает через DirectDraw и имеет свою защиту. GetPixel при запущенной игре не работает и возвращает один цвет(видимо что то блочит).
Скрины ты в каком формате получаешь?
Ответить с цитированием
  #3  
Старый 31.10.2012, 13:03
VoFF4eG VoFF4eG вне форума
Прохожий
 
Регистрация: 26.10.2012
Сообщения: 27
Репутация: 10
По умолчанию

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  
Старый 31.10.2012, 13:09
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от VoFF4eG
Bmp. Мне главное что бы делался скрин(любым способом) и я мог распознавать на нем пиксели. Остальное не важно, дальше уже разберусь.
А из этого bmp цвет пикселя получает вот так?:
Код:
var
  bmp: TBitmap;
  Color: TColor;
begin
  Color := bmp.Canvas.Pixels[X, Y];
end;
Ответить с цитированием
  #5  
Старый 31.10.2012, 13:12
VoFF4eG VoFF4eG вне форума
Прохожий
 
Регистрация: 26.10.2012
Сообщения: 27
Репутация: 10
По умолчанию

Нет, то же самое что и при GetPixel
Ответить с цитированием
  #6  
Старый 31.10.2012, 13:15
VoFF4eG VoFF4eG вне форума
Прохожий
 
Регистрация: 26.10.2012
Сообщения: 27
Репутация: 10
По умолчанию

Я так думаю что система защиты игры (античит) что то мутит(блокирует).
Ответить с цитированием
  #7  
Старый 31.10.2012, 13:23
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от VoFF4eG
Нет, то же самое что и при GetPixel
Так значит всё же получить скрины с игры ты не можешь, а выше писал, что просто не получается из скринов получить цвет пикселя.
Цитата:
Сообщение от VoFF4eG
Я так думаю что система защиты игры (античит) что то мутит(блокирует).
Вряд ли. Думаю с помощью кнопки PrintScreen у тебя тоже будет копировать чёрный экран в буфер обмена.
Ответить с цитированием
  #8  
Старый 31.10.2012, 13:25
VoFF4eG VoFF4eG вне форума
Прохожий
 
Регистрация: 26.10.2012
Сообщения: 27
Репутация: 10
По умолчанию

Дело в том, что скрины отлично сохраняются. Просто перед сохранением мне их обрабатывать нужно )
Ответить с цитированием
  #9  
Старый 31.10.2012, 15:01
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от VoFF4eG
Дело в том, что скрины отлично сохраняются. Просто перед сохранением мне их обрабатывать нужно )
У меня вот так нормально получает цвет пикселя (хоть OpenGL хоть Direct3D):
Код:
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  
Старый 31.10.2012, 15:26
VoFF4eG VoFF4eG вне форума
Прохожий
 
Регистрация: 26.10.2012
Сообщения: 27
Репутация: 10
По умолчанию

Благодарю за код. Буду пробовать. о результате отпишу.
Ответить с цитированием
  #11  
Старый 31.10.2012, 16:07
VoFF4eG VoFF4eG вне форума
Прохожий
 
Регистрация: 26.10.2012
Сообщения: 27
Репутация: 10
По умолчанию

00000000 - вот и все что я получаю...
При чем как только игруху закрываю... сразу все работает )))
Ну и что это за фигня?
Мысли будут?
Ответить с цитированием
  #12  
Старый 02.11.2012, 10:31
VoFF4eG VoFF4eG вне форума
Прохожий
 
Регистрация: 26.10.2012
Сообщения: 27
Репутация: 10
По умолчанию

Есть ли возможность как то защитить свою программу от внешних воздействий на нее?
Ответить с цитированием
  #13  
Старый 05.11.2012, 17:09
Anklav Anklav вне форума
Прохожий
 
Регистрация: 10.06.2011
Адрес: Харьков
Сообщения: 22
Версия Delphi: 7
Репутация: 10
По умолчанию

Удалил сообщение. (мой метод уже предлагали)

Последний раз редактировалось Anklav, 05.11.2012 в 17:14.
Ответить с цитированием
  #14  
Старый 05.11.2012, 17:57
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Цитата:
Сообщение от VoFF4eG
Есть ли возможность как то защитить свою программу от внешних воздействий на нее?
На твою программу в данном случае ничто не воздействует. Лично я у себя на компе нашел несколько 3д приложений, где выше описанные методы не работают.
Ответить с цитированием
  #15  
Старый 08.11.2012, 14:24
VoFF4eG VoFF4eG вне форума
Прохожий
 
Регистрация: 26.10.2012
Сообщения: 27
Репутация: 10
По умолчанию

Если на программу нет внешнего воздействия то почему происходит эта фигня??? Тупо не могу узнать цвет пикселя. возвращает нули и все. Хотя бы узнать в чем причина.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:22.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter