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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.11.2015, 02:34
Аватар для Alloc
Alloc Alloc вне форума
Начинающий
 
Регистрация: 17.09.2014
Сообщения: 104
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Работа с графикой. Сильные тормоза при поиске пикселей в игре

Здравствуйте многоуважаемые!

По какой то причине ниже следующий код не отрабатывает так как было задумано при включенном Aero в Windows 7 и со всем остальным, как только я ставлю "Визуальные эффекты - Обеспечить наилучшее быстродействие" так сразу все отрабатывает как надо. Поначалу я думал мой ноутбук не справляется, запустил на компьютере (современный, относительно мощный) - все то же самое.

З.Ы. Пиксели программа проверяет в игре.

Вот собственно код:

Код:
procedure TForm1.GetPixels;
var
  MyBMP: TBitmap;
  DC: HDC;
  MyPoint, MSPoint: TPoint;
  MyColor: TColor;
  r,g,b: Integer;

  i, m, PCount: Integer;
  x, y: array of integer;
begin
  DC := GetDC(FindWindow(ProgName,''));

  MyPoint.X:= 771;
  MyPoint.Y:= 518; //521; //514;

  Windows.ClientToScreen(h1, MyPoint);

  m:=8;
  PCount:= 4;
  SetLength(X,4);
  SetLength(Y,4);
  X[0]:= 24-m; 
  Y[0]:= 15;
  X[1]:= 31-m;
  Y[1]:= 19;
  X[2]:= 31-m; 
  Y[2]:= 22; 
  X[3]:= 24-m; //795;
  Y[3]:= 27; 

  MyBMP := TBitmap.Create;
  try
    MyBMP.PixelFormat := pf32bit;
    MyBMP.Width := 45; MyBMP.Height := 45; //1; //40
    BitBlt(MyBMP.Canvas.Handle, 0, 0, MyBMP.Width, MyBMP.Height, DC, MyPoint.X, MyPoint.Y, SRCCOPY);

    for i:= 0 to PCount-1 do
    begin
      MyColor:= MyBMP.Canvas.Pixels[X[i], Y[i]];
      r:=GetRValue(MyColor);
      g:=GetGValue(MyColor);
      b:=GetBValue(MyColor);

      if ((r>=190) and (r<=220)) and ((g>=235) and (g<=253)) and ((b>=125) and (b<=150)) then EmulateKey(h1, VK_UP);
      if (r=0) and ((g>=110) and (g<=150)) and ((b>=250) and (b<=255)) then EmulateKey(h1, VK_LEFT);
      if ((r>=180) and (r<=236)) and ((g>=14) and (g<=36)) and ((b>=35) and (b<=58)) then EmulateKey(h1, VK_DOWN);
      if (r=255) and ((g>=165) and (g<=180)) and ((b>=5) and (b<=15)) then EmulateKey(h1, VK_RIGHT);
      if (r=255) and ((g>=140) and (g<=150)) and ((b>=185) and (b<=200)) then EmulateKey(h1, VK_SPACE);


    end;
  finally
    MyBMP.Free;
  end;

end;

как с этим бороться? Я конечно могу на время программно отключить все эффекты windows но хотелось бы обойтись без этого
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter