Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Быстрый поиск заданного цвета 
:(
    Опции темы
Garmahis
Дата 4.12.2008, 16:49 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 23.12.2004

Репутация: нет
Всего: 4



Добрый день! У меня следующая задача. Надо в квадрате 18х18 в центре экрана определить есть ли пиксели по цвету совпадающие с необходимыми. Необходимые я храню в TStringList. Ну и если есть то получить координаты этого пикселя. Необходимые цвета это различные оттенки голубого. Я смог решить это двумя путями.
1. 
Код

function GetDesktopColor(x,y:integer):integer;
var DC:HDC;
begin
  DC:=GetDC(0);
  Result:=GetPixel(DC,x,y);
  ReleaseDC(0,DC);
end;

procedure TQ3.Process;
var
  s:string;
  x,y:integer;
begin
  while f = True do
  begin
     for x := 390 to 408  do
       for y := 290 to 308 do
       begin
         s:= IntToStr(GetDesktopColor(X, Y));
         if Points.IndexOf(s)>-1 then
         begin
           SetCursorPos(x,y);
         end;
         Application.ProcessMessages;
       end;
    Application.ProcessMessages;
  end;
end;

2. Тут почти так же только я этот квадрат гружу в TBitmap а потом прогоняю его.
Код

procedure TQ3.GetBitmap;
var
  DC: HDC;
begin
  DC:=GetDC(0);  //Дескpиптоp экpана
  bitblt(bmpp.Canvas.Handle, 0, 0, bmpp.Width, bmpp.Height, DC, 390, 290, SRCCOPY);
  ReleaseDC(0, DC);
end;

procedure TQ3.Process2;
var
  x,y:integer;
  s:String;
begin
  while f = True do
  begin
     GetBitmap;
     for x := 0 to 17  do
       for y := 0 to 17 do
       begin
         s:= IntToStr(bmpp.Canvas.Pixels[x,y]);
         if Points.IndexOf(s)>-1 then
         begin
           SetCursorPos(390+x,290+y);
         end;
         Application.ProcessMessages;
       end;
    Application.ProcessMessages;
  end;
end;


К сожалению особенной разницы в скорости обработки я не заметил. Подскажите пожалуйста есть ли другие способы с помощью которых можно ускорить процесс?
PM   Вверх
bems
Дата 4.12.2008, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 1
Всего: 88



q3?


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Garmahis
Дата 4.12.2008, 20:12 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 23.12.2004

Репутация: нет
Всего: 4



ага
PM   Вверх
bems
Дата 5.12.2008, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 1
Всего: 88



)))

ну во первых есть много готовых решений, во вторых вынеси за цикл GetDC и ReleaseDC.

еще в консоли q3 есть команда, предназначенная для уравновешивания медленного пинга, она уменьшает время от нажатия кнопки мышки до выстрела, поищи ее на соотв. форумах. Application.ProcessMessages тоже замедляет дело. 


--------------------
Обижено школьников: 8
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0453 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.