Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2010, 23:10   #1
us5mch
 
Регистрация: 05.05.2010
Сообщений: 3
По умолчанию Сканирование формы

procedure wer();
var i,j : integer;
Color : Cardinal;

DC: HDC;
begin
DC := GetDC( 0 );
Color:= GetPixel( DC, 50,245 );

for i:=200 to 850 do begin
for j:=150 to 435 do begin
Color:= GetPixel( DC, i,j );

if (GetPixel( DC, i-49,j )=0) then begin

if (GetPixel( DC, i+49,j )=0) then begin
if (GetPixel( DC, i,j-49 )=0) then begin
if (GetPixel( DC, i,j+49 )=0) then begin
Form1.Canvas.MoveTo(i-48-Form1.Left-4,j-Form1.Top-30);
Form1.Canvas.LineTo(i+48-Form1.Left-4,j-Form1.Top-30);
Form1.Canvas.MoveTo(i-Form1.Left-4,j-30-Form1.Top-30);
Form1.Canvas.LineTo(i-Form1.Left-4,j+30-Form1.Top-30);
end;
end;
end;
end;
end;
end;
end;





Смысл такой: на форме появляется окружность в произвольном месте. Диаметр окружности известен. нужно найти центр окружности и в центре нарисовать крестик. Я перебираю попиксельно всю форму и проверяю на цвет равноудалённые пиксели от данного на радиус окружности - два пикселя по горизонтали и два по вертикали. Как только все четыре пикселя имеют один цвет то я нахожусь в центре и рисую крест. Но всё это очень медленно. Как повысить скорость?
us5mch вне форума Ответить с цитированием
Старый 05.05.2010, 23:33   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

начиная с верхней линии смотрим два соседних по горизонтали.
как только два пикселя имеют разный цвет значит мы коснулись окружности. (находимся на горизонтальной касательной).
Перпендикуляр к касательной проходит через центр.(является диаметром)
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 05.05.2010 в 23:35.
evg_m вне форума Ответить с цитированием
Старый 07.05.2010, 21:31   #3
us5mch
 
Регистрация: 05.05.2010
Сообщений: 3
По умолчанию

Можно и так но всё равно GetPixel это очень медленно, а как через Bitmap?
us5mch вне форума Ответить с цитированием
Старый 07.05.2010, 21:52   #4
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Я сделал так я делал ресовалку графиков и очень долго рисовалось просто чем меньше процесорр возвращяеться на исходную точку тем быстрее будет идти поиск и выввод
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сканирование директории D!zel Общие вопросы Delphi 8 22.12.2009 21:11
сканирование сети Sasuke-cun Работа с сетью в Delphi 2 06.12.2009 16:58
сканирование папки andrey poki Общие вопросы Delphi 2 26.03.2009 08:20
Сканирование директорий. Serious Общие вопросы Delphi 2 14.02.2009 15:17
Сканирование экрана pecson Общие вопросы Delphi 5 13.12.2008 07:25