Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Pixels[x,y] слишком медленный

-

Вопросы и ответы, обсуждения

- Ваши вопросы по Pascal/Delphi только в данном разделе

Ответ
 
Опции темы
Старый 26.08.2012, 13:25   #1
 Разведчик
Аватар для Илья333777
 
Илья333777 скоро будет известенИлья333777 скоро будет известенИлья333777 скоро будет известен
Регистрация: 14.11.2010
Сообщений: 24
Популярность: 289
Сказал(а) спасибо: 2
Поблагодарили 6 раз(а) в 5 сообщениях
 
По умолчанию Pixels[x,y] слишком медленный

Мне надо подсчитать количество пикселей определённого цвета на экране (например цвета 16777215 - чисто белый). Я у каждого пикселя в области проверяю функцией Pixels[x,y] цвет, но это слишком долго. Например в программе clickermann есть тоже такая функция и она подсчитывает пиксели хоть на всём экране за 1/3 секунды (может и быстрее). Мне вот и нужна такая скорость. А у меня подсчёт происходит оооочень долго (несколько секунд), и это в маленькой области!
Вот мой код для подсчёта по клику кнопки:

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
dtc:=TCanvas.Create;
dtc.Handle:=GetDC(Hwnd_Desktop);
xn:=1000; /х начальный
xk:=1050; /х конечный
yn:=300; /у начальный
yk:=350; /у конечный
x:=xn; /сначала идём в первый пиксель, который слева по х
y:=yn; /сначала идём в первый пиксель, который сверху по у
count:=0; /счётчик равен 0
while y<=yk  do /пока у меньше у конечного
  begin
    temp:= dtc.Pixels[x,y]; /считываем цвет и заводим в переменную
    if temp=16777215 then /если он белый, то
      count:=count+1; /прибавляем к счётчику 1
    if x>xk then begin /если х подошёл к конечному, то 
      y:=y+1; /спускаемся вниз на 1 пиксель по у
      x:=xn; /и переходим в начало по х
    end;
    x:=x+1; /сдвигаемся по х на следующий пиксель

  end;
   Label1.Caption:=inttostr (count); /выводим в лейбл кол-во найденных пикселей заданного цвета
end;
Вот приведите мне пожалуйста другую функцию, желательно по-проще и с комментариями, как у меня. Ну и чтобы быстрей работало.
Жду ваших ответов и помощи может я что-то не так сделал.
  Ответить с цитированием
Пользователь сказал cпасибо:
=PaLeTiZaToR= (01.09.2012)
Старый 26.08.2012, 14:23   #2
NoItemName
 Рыцарь
Аватар для J-Fobos
 
J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(
Регистрация: 12.04.2009
Сообщений: 394
Популярность: 47903
Сказал(а) спасибо: 515
Поблагодарили 1,124 раз(а) в 430 сообщениях
 
По умолчанию Re: Pixels[x,y] слишком медленный

Закиньте скрин экрана в TStream и проверяйте цвета в нем, сравнивая байты.
________________

В любом из нас спит гений. И с каждым днем все крепче.
Запомните раз и навсегда:= 'Помочь' <> 'Сделайте за меня';
  Ответить с цитированием
Старый 26.08.2012, 18:42   #3
 Разведчик
Аватар для Илья333777
 
Илья333777 скоро будет известенИлья333777 скоро будет известенИлья333777 скоро будет известен
Регистрация: 14.11.2010
Сообщений: 24
Популярность: 289
Сказал(а) спасибо: 2
Поблагодарили 6 раз(а) в 5 сообщениях
 
По умолчанию Re: Pixels[x,y] слишком медленный

J-Fobos, а по-проще никак нельзя? Или хотя бы приведите примерный код как это сделать, а то я в потоках ещё не разбираюсь =((.
Кстати видел код на эту тему:
Код:
function GetColorXY(Graphic: TGraphic; Color: TColor; var X, Y: Integer): Boolean;
var
Bmp: TBitmap;
i, j: Integer;
Pixel, CmpColor: Cardinal;
Scan: Pointer;
R, G, B: Byte;
begin
Result:=false;
CmpColor:=ColorToRGB(Color);
Bmp:=TBitmap.Create;
try
Bmp.Assign(Graphic);
Bmp.PixelFormat:=pf24bit;
for i:=0 to Bmp.Height - 1 do begin
Scan:=Bmp.ScanLine[i];
for j:=0 to Bmp.Width - 1 do begin
Pixel:=PCardinal(Integer(Scan) + j*3)^;
R:=GetBValue(Pixel);
G:=GetGValue(Pixel);
B:=GetRValue(Pixel);
if RGB(R, G, B) = CmpColor then begin
Result:=true;
X:=j + 1;
Y:=i + 1;
Exit;
end;
end;
end;
finally
Bmp.Free;
end;
end;
Только не очень понимаю, он быстрей работает, или медленней (строк то больше) и вообще это может ли как-нибудь мне помочь.
  Ответить с цитированием
Старый 26.08.2012, 19:38   #4
NoItemName
 Рыцарь
Аватар для J-Fobos
 
J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(
Регистрация: 12.04.2009
Сообщений: 394
Популярность: 47903
Сказал(а) спасибо: 515
Поблагодарили 1,124 раз(а) в 430 сообщениях
 
По умолчанию Re: Pixels[x,y] слишком медленный

Илья333777, зачем по-проще если нужна скорость?
________________

В любом из нас спит гений. И с каждым днем все крепче.
Запомните раз и навсегда:= 'Помочь' <> 'Сделайте за меня';
  Ответить с цитированием
Старый 26.08.2012, 19:43   #5
 Разведчик
Аватар для Илья333777
 
Илья333777 скоро будет известенИлья333777 скоро будет известенИлья333777 скоро будет известен
Регистрация: 14.11.2010
Сообщений: 24
Популярность: 289
Сказал(а) спасибо: 2
Поблагодарили 6 раз(а) в 5 сообщениях
 
По умолчанию Re: Pixels[x,y] слишком медленный

Ну я не сильно в таких функциях разбираюсь, а что думаете по второму коду??
  Ответить с цитированием
Старый 26.08.2012, 21:00   #6
NoItemName
 Рыцарь
Аватар для J-Fobos
 
J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(
Регистрация: 12.04.2009
Сообщений: 394
Популярность: 47903
Сказал(а) спасибо: 515
Поблагодарили 1,124 раз(а) в 430 сообщениях
 
По умолчанию Re: Pixels[x,y] слишком медленный

По принципу работы то же что и первый. Только вытягивает значение цвета не из канваса, а из bmp.
________________

В любом из нас спит гений. И с каждым днем все крепче.
Запомните раз и навсегда:= 'Помочь' <> 'Сделайте за меня';
  Ответить с цитированием
Старый 27.08.2012, 00:16   #7
Бандеровец
 Лейтенант-командор
Аватар для VeTaL_UA
 
VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
Отправить сообщение для VeTaL_UA с помощью ICQ Отправить сообщение для VeTaL_UA с помощью Skype™
 
По умолчанию Re: Pixels[x,y] слишком медленный

Наиболее быстрый вариант это гразвнуть снимок экрана в стрим и побайтово разобрать. Да, это многокода
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.

Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.


  Ответить с цитированием
Старый 27.08.2012, 10:11   #8
 Разведчик
Аватар для Илья333777
 
Илья333777 скоро будет известенИлья333777 скоро будет известенИлья333777 скоро будет известен
Регистрация: 14.11.2010
Сообщений: 24
Популярность: 289
Сказал(а) спасибо: 2
Поблагодарили 6 раз(а) в 5 сообщениях
 
По умолчанию Re: Pixels[x,y] слишком медленный

Хм, кстати, по-моему в clickermann там и делается.
  Ответить с цитированием
Старый 27.08.2012, 11:05   #9
 Разведчик
Аватар для Softwarer
 
Softwarer неизвестен в этих краяхSoftwarer неизвестен в этих краяхSoftwarer неизвестен в этих краях
Регистрация: 01.06.2012
Сообщений: 25
Популярность: -242
Сказал(а) спасибо: 8
Поблагодарили 9 раз(а) в 6 сообщениях
 
По умолчанию Re: Pixels[x,y] слишком медленный

Все, что ты нашел в нете - почти бред.

по-моему, достаточно просто отсканить сверху-вниз слева-направо. Я так понял, если как кликерман, то это для ДО => найденных предметов будет [0; 8] є N. (провернуть это твоим кодом можно за 1сек) - как ускорить, сказали, но найденного кода будет достаточно для нормального продвижения.
  Ответить с цитированием
Старый 29.08.2012, 11:14   #10
 Разведчик
Аватар для Илья333777
 
Илья333777 скоро будет известенИлья333777 скоро будет известенИлья333777 скоро будет известен
Регистрация: 14.11.2010
Сообщений: 24
Популярность: 289
Сказал(а) спасибо: 2
Поблагодарили 6 раз(а) в 5 сообщениях
 
По умолчанию Re: Pixels[x,y] слишком медленный

Softwarer, в том то и дело, что мой код сканит даже 2500 пикселей за секунд 10 где-то.

Добавлено через 2 минуты
Ну всё-таки может мне кто-нибудь примерный код даст, чтобы в стрим экран загонять и считывать?

Последний раз редактировалось Илья333777; 29.08.2012 в 11:16. Причина: Добавлено сообщение
  Ответить с цитированием
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Руководство] Для тех кто не слишком опытен в ПВ domO Общение и обсуждение Perfect World 7 09.01.2010 19:37

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 12:13.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net