![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Регистрация: 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; Смысл такой: на форме появляется окружность в произвольном месте. Диаметр окружности известен. нужно найти центр окружности и в центре нарисовать крестик. Я перебираю попиксельно всю форму и проверяю на цвет равноудалённые пиксели от данного на радиус окружности - два пикселя по горизонтали и два по вертикали. Как только все четыре пикселя имеют один цвет то я нахожусь в центре и рисую крест. Но всё это очень медленно. Как повысить скорость? |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,543
|
![]()
начиная с верхней линии смотрим два соседних по горизонтали.
как только два пикселя имеют разный цвет значит мы коснулись окружности. (находимся на горизонтальной касательной). Перпендикуляр к касательной проходит через центр.(является диаметром)
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 05.05.2010 в 23:35. |
![]() |
![]() |
![]() |
#3 |
Регистрация: 05.05.2010
Сообщений: 3
|
![]()
Можно и так но всё равно GetPixel это очень медленно, а как через Bitmap?
|
![]() |
![]() |
![]() |
#4 |
Ещё не
Форумчанин
Регистрация: 04.01.2010
Сообщений: 517
|
![]()
Я сделал так я делал ресовалку графиков и очень долго рисовалось просто чем меньше процесорр возвращяеться на исходную точку тем быстрее будет идти поиск и выввод
Воображение важнее, чем знания. (Albert Einstein)
![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сканирование директории | 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 |