FreeBasic
Главная
Вход
Регистрация
Пятница, 29.03.2024, 13:22Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Freebasic » Вопросы по языку FreeBasic » Толщина линии
Толщина линии
salexeiyДата: Воскресенье, 31.12.2017, 15:56 | Сообщение # 1
Лейтенант
Группа: Пользователи
Сообщений: 72
Репутация: 2
Статус: Offline
Вопрос по графике. Каким способом можно регулировать толщину линии во ФБ? Может есть какая библиотека или алгоритм. Заранее спасибо.
 
WQДата: Воскресенье, 31.12.2017, 17:31 | Сообщение # 2
Полковник
Группа: Проверенные
Сообщений: 215
Репутация: 7
Статус: Offline
salexeiy
http://freebasic.ucoz.com/forum/5-139-805-16-1400730222


Сообщение отредактировал WQ - Воскресенье, 31.12.2017, 17:31
 
salexeiyДата: Понедельник, 01.01.2018, 12:18 | Сообщение # 3
Лейтенант
Группа: Пользователи
Сообщений: 72
Репутация: 2
Статус: Offline
Это не совсем то, что нужно. Как я понял, алгоритм рисует линию из окружностей. Во-первых, окружность рисуется с параметром радиус, а не диаметр, поэтому сделал переменную size/2. Во-вторых, из-за специфики рисования окружностей, линия всё равно получается в два раза толще. Т.е. если мы хотим линию толщиной в один пиксель, то линия получится в два пикселя, ну и т.д.

И, я не так задал вопрос, извините. Я имел ввиду не только толщину, но и сглаженность линии. Уже читал про алгоритм Брезенхема и Ву, и даже есть код на фрибейсике на RosettaCode. Но всё это как то мудрёно, поэтому и спросил, может есть что попроще или какая библиотека.
 
DarkDemonДата: Понедельник, 01.01.2018, 21:10 | Сообщение # 4
Полковник
Группа: Друзья
Сообщений: 188
Репутация: -2
Статус: Offline
Антиализинг линию разной толщины. Сложновато это кодится, да и медленно будет 100%.
Окружности - тоже медленно.

Наверное имеет смысл совместить 2 алгоритма, брезенхем с AA и просто брезенхем.
Т.е. сначала идём по брезенхему и рисуем толстую линию, а потом уже края шлифуем.
Брезенхем с эмуляцией AA у меня был, а вот толстые линии не кодил.
Чисто теоретически по вышеописанному алгоритму - линия получится толще на пол пикселя, но это всё фигня.


Сообщение отредактировал DarkDemon - Понедельник, 01.01.2018, 21:22
 
salexeiyДата: Среда, 03.01.2018, 18:21 | Сообщение # 5
Лейтенант
Группа: Пользователи
Сообщений: 72
Репутация: 2
Статус: Offline
Понятно. Не могу найти, где сглаженную линию с помощью OpenGL делали. Конечно, это извращение, ради линии GL использовать, но интересно, как это там реализовано.
Цитата
Антиализинг линию разной толщины. Сложновато это кодится, да и медленно будет 100%.

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

Ещё можно рисовать и делать толщину линий при помощи Windows API, но, опять же без сглаживания. Продолжаю поиски...

По-моему, нашёл. Есть такая штука, как GDI+, там есть и линии, и толщина, и, что самое главное, сглаживание. Буду изучать.


Сообщение отредактировал salexeiy - Среда, 03.01.2018, 20:30
 
DarkDemonДата: Воскресенье, 07.01.2018, 16:07 | Сообщение # 6
Полковник
Группа: Друзья
Сообщений: 188
Репутация: -2
Статус: Offline
Цитата salexeiy ()
алгоритм Ву

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

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

Цитата salexeiy ()
Есть такая штука, как GDI+

Что-то мне подсказывает, что это тоже небыстро. Хотя можете попробовать, попытка не пытка.


Сообщение отредактировал DarkDemon - Воскресенье, 07.01.2018, 16:08
 
WQДата: Воскресенье, 07.01.2018, 16:19 | Сообщение # 7
Полковник
Группа: Проверенные
Сообщений: 215
Репутация: 7
Статус: Offline
Я просто пользуюсь библиотекой CD
Там все есть
 
salexeiyДата: Понедельник, 08.01.2018, 12:22 | Сообщение # 8
Лейтенант
Группа: Пользователи
Сообщений: 72
Репутация: 2
Статус: Offline
Цитата DarkDemon ()
Что-то мне подсказывает, что это тоже небыстро.
Как оказалось, это так и есть. GDI+ полностью сделан на основе Cairo, а это то ещё тормозилово, взять хотя бы тот же Inkscape, к тому же по сложности напоминает WinAPI.

Цитата WQ ()
Я просто пользуюсь библиотекой CD
Есть по ней справка?
 
WQДата: Понедельник, 08.01.2018, 14:20 | Сообщение # 9
Полковник
Группа: Проверенные
Сообщений: 215
Репутация: 7
Статус: Offline
Цитата salexeiy ()
Есть по ней справка?

http://webserver2.tecgraf.puc-rio.br/cd/


Сообщение отредактировал WQ - Понедельник, 08.01.2018, 14:21
 
Форум » Freebasic » Вопросы по языку FreeBasic » Толщина линии
  • Страница 1 из 1
  • 1
Поиск: