Илья333777
26.08.2012, 13:25
Мне надо подсчитать количество пикселей определённого цвета на экране (например цвета 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;
Вот приведите мне пожалуйста другую функцию, желательно по-проще и с комментариями, как у меня. Ну и чтобы быстрей работало.
Жду ваших ответов и помощи :sceptic: может я что-то не так сделал.
Вот мой код для подсчёта по клику кнопки:
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;
Вот приведите мне пожалуйста другую функцию, желательно по-проще и с комментариями, как у меня. Ну и чтобы быстрей работало.
Жду ваших ответов и помощи :sceptic: может я что-то не так сделал.