Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.02.2012, 17:24
vetatto vetatto вне форума
Прохожий
 
Регистрация: 01.02.2012
Сообщения: 2
Репутация: 10
По умолчанию Алгоритм Брезенхема

Привет всем! У меня возникла проблема с алгоритмом Брезенхема для окружности.

Нужно нарисовать окружность на изображении.
Если я рисую ее на цветном изображении, то выходит вот


А если на черно-белом то вот


Сам алгоритм
PHP код:
procedure bres_circle(xc,yc,r:integer);
 var 
x,y,d:integer;
 
procedure sim(x,y:integer);
  
begin
    Form1
.Image1.Canvas.Pixels[x+xc,y+yc]:=clred;
    
Form1.Image1.Canvas.Pixels[x+xc,-y+yc]:=clred;
    
Form1.Image1.Canvas.Pixels[-x+xc,-y+yc]:=clred;
    
Form1.Image1.Canvas.Pixels[-x+xc,y+yc]:=clred;
    
Form1.Image1.Canvas.Pixels[y+xc,x+yc]:=clred;
    
Form1.Image1.Canvas.Pixels[y+xc,-x+yc]:=clred;
    
Form1.Image1.Canvas.Pixels[-y+xc,-x+yc]:=clred;
    
Form1.Image1.Canvas.Pixels[-y+xc,x+yc]:=clred;

  
end;
  
begin
  d
:=3-2*y;
  
x:=0;
  
y:=r;
  while(
<= y) do
    
begin
     sim
(x,y);
     if 
d<0    then d:=d+4*x+6
     
else begin
     d
:=d+4*(x-y)+10;
     
dec(y)
    
end;
  
inc(x)
  
end;
 
end

Подскажите почему так? Мне нужно работать именно с ЧБ изображением, причем при рисовании окружности нужно знать ее точки из-за этого Просто функцией Ellipse не выходит...

Последний раз редактировалось vetatto, 01.02.2012 в 17:29.
Ответить с цитированием
  #2  
Старый 01.02.2012, 17:57
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Какой-то квадратовый у тебя алгоритм (в смысле квадраты рисует )
Я с алгоритмом не знаком, поетому копипастерством заниматься не буду, но в Википедии полностью рабочий пример приведен - если не лень то можно посмотреть - работает отлично, и не зависит от формата изображения - уже проверил)
Ответить с цитированием
  #3  
Старый 01.02.2012, 19:17
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

На ч/б палитра ограничена, и red нарисоваться не может. Изменяй палитру канваса.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #4  
Старый 01.02.2012, 22:42
vetatto vetatto вне форума
Прохожий
 
Регистрация: 01.02.2012
Сообщения: 2
Репутация: 10
По умолчанию

YVitaliy, спасибо. Нарисовал.

Только вот теперь еще одна проблема... теперь нужно провести линии от центра к границе окружности с таким условием. Если на пути линии появился хоть один черный пиксель, то линию не рисуем.

У меня получается так


При рисовании закрашиваются просто белые пиксели и все

Последний раз редактировалось vetatto, 01.02.2012 в 22:45.
Ответить с цитированием
  #5  
Старый 01.02.2012, 23:20
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Начальная и конечная точка известна, проверяй все пикселы на этом отрезке.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #6  
Старый 02.02.2012, 17:00
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Думаю, за тем же алгоритмом Брезенхэма, только для линий - рисуешь линию(там цыкл по пикселях) проверяешь цвет текущего пикселя и в случае черного цвета - break.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:30.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter