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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.12.2013, 19:59
kurganov4 kurganov4 вне форума
Прохожий
 
Регистрация: 04.02.2012
Сообщения: 10
Репутация: 10
Вопрос Координаты пикселей изображения на косой линии

Здравствуйте!
Никак не могу решить простую казалось бы задачку.
Есть бмп изображение, я задаю две произвольные точки на этом изображении и рисую прямую линию между ними. Вопрос в том, как получить координаты пикселей, которые пересекает эта прямая.
Мне это нужно для представления гистограммы интенсивностей пикселов на этой линии.
Никак в голову нужный алгоритм не приходит, может кто-нибудь посоветует как быть?
Ответить с цитированием
  #2  
Старый 05.12.2013, 08:41
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

исходя из:
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 05.12.2013, 15:50
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

NumLock, ты видимо не правильно понял вопрос. Вот как строить прямую, даже реализация есть, а я в довикипедоные времена сам реализацию писал...
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
Этот пользователь сказал Спасибо Aristarh Dark за это полезное сообщение:
kurganov4 (10.12.2013)
  #4  
Старый 05.12.2013, 16:07
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
Радость

Цитата:
Сообщение от Aristarh Dark
NumLock, ты видимо не правильно понял вопрос. Вот как строить прямую, даже реализация есть, а я в довикипедоные времена сам реализацию писал...
Я в доинтернетные времена дизассемблировал вручную прошивку Бейсика из журнала "Радио" (то ли для "Микро-80", то ли для "Радио 86РК") чтобы посмотреть как он рисует линии. Ну и вообще было интересно разобраться как оно там всё работает...
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо poli-smen за это полезное сообщение:
Freeman (06.12.2013), M.A.D.M.A.N. (05.12.2013)
  #5  
Старый 05.12.2013, 16:48
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Радость

Цитата:
Сообщение от Aristarh Dark
даже реализация есть
ну так даже Брезенхэм исходил из этого уравнения))) просто в описании алгоритма в вики оно записано в ином виде: y2-y1 перенесено. а уж следовать алгоритму Брезенхэма или инкрементировать на 1 координату по максимальной длине и высчитывать через приращение координату минимальной длины дела хозяйское.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #6  
Старый 06.12.2013, 12:39
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

А велосипед то изобретен)))

LineDDA function
Цитата:
The LineDDA function determines which pixels should be highlighted for a line defined by the specified starting and ending points.

Пример:

Код:
procedure LineDDAProc(X, Y: Integer; Data: Integer); stdcall;
begin
  Form1.Canvas.Pixels[X, Y]:=clBlack;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  LineDDA(10, 60, 109, 109, @LineDDAProc, 0);
end;

Получает все точки для линии (10, 60)-(109, 109). Координаты возвращает через функцию обратного вызова LineDDAProc в X и Y.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
kurganov4 (10.12.2013)
  #7  
Старый 06.12.2013, 17:12
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Цитата:
А велосипед то изобретен)))
Прикольно. Век живи - век учись...

ЗЫЖ Вообще колдунство, я прям под впечатлением.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.

Последний раз редактировалось Aristarh Dark, 06.12.2013 в 17:15.
Ответить с цитированием
  #8  
Старый 06.12.2013, 17:40
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от NumLock
А велосипед то изобретен)))

LineDDA function
Хм... Что-то об этой функции я даже и не вспомнил, хотя ещё не прошло наверное и месяца как я читал книгу Антона Григорьева "О чём не пишут в книгах по Delphi" в которой он с помощью LineDDA творит прямо таки чудеса.

Вот примеры из книги:


Ответить с цитированием
  #9  
Старый 10.12.2013, 18:10
kurganov4 kurganov4 вне форума
Прохожий
 
Регистрация: 04.02.2012
Сообщения: 10
Репутация: 10
По умолчанию

Всем спасибо!
Подтянул свои знания. Брезенхема прошарил, думал уже по нему делать.
Но LineDDA это действительно круто))
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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