|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Работа с графикой. Сильные тормоза при поиске пикселей в игре
Здравствуйте многоуважаемые!
По какой то причине ниже следующий код не отрабатывает так как было задумано при включенном 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 но хотелось бы обойтись без этого |