Показать сообщение отдельно
  #9  
Старый 03.10.2015, 19:09
Аватар для Alloc
Alloc Alloc вне форума
Начинающий
 
Регистрация: 17.09.2014
Сообщения: 104
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Bargest
В корне не верно. Снова считаем. Что будет, если кнопку не нажать?
спасибо, теперь ясно)

Цитата:
Сообщение от Bargest
Этот код копирует 1 пиксель с DC в битмап как отдельное изображение. В чем глубинный смысл сего извращения, я так и не осознал.
Изначально была идея для поиска пикселей использовать ScanLine так как я где то слышал, что это самый быстрый способ... но на деле я что то не вижу разницы между этим и через GetPixel.

Цитата:
Сообщение от Bargest
Я предлагаю скопировать всё DC в битмап до цикла. Соответственно, размер битмапа должен быть как у окна в данный момент.
Т.е. сделать скриншот всего экрана DC? Я попробую, спасибо. Но так или иначе, мне кажется что это мало изменит ситуацию а может даже усугубит? Ведь раньше мы сохраняли всего один пиксель а сейчас целый экран.. Или это не так?

Цитата:
Сообщение от Bargest
Или же брать пиксели в цикле прямо с DC, что видится самым логичным решением. Задача ведь требует считать малое число (четыре) отдельных разбросанных пикселей с экрана, а не обрабатывать фотографии. Зачем вся эта фигня с BMP?

Вы имеете в виду через GetPixel? Я пробовал так делать, так же в таймере определял цвет каждого пикселя, сравнивал и выполнял соответствующее действие.. что то типо такого:
Код:
PixColorA:= GetPixel(DC,dx,dy);
  ra:=GetRValue(PixColorA);
  ga:=GetGValue(PixColorA);
  ba:=GetBValue(PixColorA);

  PixColorB:= GetPixel(DC,fx,fy);
  rb:=GetRValue(PixColorB);
  gb:=GetGValue(PixColorB);
  bb:=GetBValue(PixColorB);

  PixColorC:= GetPixel(DC,jx,jy);
  rc:=GetRValue(PixColorC);
  gc:=GetGValue(PixColorC);
  bc:=GetBValue(PixColorC);

  PixColorD:= GetPixel(DC,kx,ky);
  rd:=GetRValue(PixColorD);
  gd:=GetGValue(PixColorD);
  bd:=GetBValue(PixColorD);

  if (ra>80) and (ga>80) and (ba>100) then EmulateKey(h1, Ord('D'));
  if (rb>36) and (gb>100) and (bb>130) then EmulateKey(h1, Ord('F'));
  if (rc>36) and (gc>100) and (bc>130) then EmulateKey(h1, Ord('J'));
  if (rd>80) and (gd>80) and (bd>100) then EmulateKey(h1, Ord('K'));
но как я писал в своем первом посте, программа часто не срабатывала и сильно тормозила саму игру так как читала эти 4 пикселя с интервалом в 1мс в таймере. Вы говорили выше про 1мс и про 24 кадра но дело в том, что в игре эти предметы которые я пытаюсь поймать делая эту программу двигаются очень быстро и если я поставлю допустим 100мс или даже 40мс в таймере они не определятся.. (ну это конечно в моем случае). Может есть другой способ для этой задачи? Я уже пробовал и в 4 потока запускать, все так же) Уже не знаю... на Вас вся надежда

чтобы Вы понимали о чем я вообще говорю вот скриншот из игры. Объекты падают быстро сверху вниз и нужно успеть нажать кнопку в тот момент когда объект будет внизу:

Ответить с цитированием