Прямые гладкие линии

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Лёха
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 30.04.2005 (Сб) 9:44

Прямые гладкие линии

Сообщение Лёха » 16.06.2005 (Чт) 8:06

Привет.
Возникла у меня небольшая проблемма, а как решить не знаю.
Если рисовать Line по вертикали или горизонтали, то линии ровные и сплошные. Если рисовать линии под углом, то линии состоят из нескольких маленьких линий.
Как можно нарисовать прямую гладкую линию?

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 16.06.2005 (Чт) 8:32

Это видны пиксели монитора, с этим ничего не сделаешь. Вот выведи на печать у принтера разрешение на много больше, там будет не заметно.

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 16.06.2005 (Чт) 8:48

2 Matew: А почему бы сглаживание не заюзать ? :wink:

2 Лёха: Лёх, ты же наверняка видел, каким образом эти УГЛЫ сглаживает например тот же PHOTOSHOP, COREL DRAW и т.п

Есть такая великолепная вешь GDI+ ( скажи спасибо Tyomitch-у)

Он сделал на неё оболочку под VB. И эта DLL позволяет добиться такого же сглаживания линии.

Так что тебе нужно поюзать её.

Попробую сляпать пример и кинуть тебе.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 16.06.2005 (Чт) 9:22

Пример уже есть - http://vbrussian.com/Examples.asp?ID=102
Там именно про сглаженные линии.
Изображение

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 16.06.2005 (Чт) 9:34

А вообще, ключевое слово - Antialiasing. На эту тему есть куча всего в интернете, в том числе, как самому сделать сглаженные линии.

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 16.06.2005 (Чт) 11:15

2 Tyomitch: Ещё раз - RESPECT :D

Лёха
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 30.04.2005 (Сб) 9:44

Сообщение Лёха » 17.06.2005 (Пт) 7:58

Спасибо за ответы.
У меня очередной вопрос по теме.
Вот пример кода из программы, ссылка на которую дана выше:
Код: Выделить всё
Set Graphics = CreateGraphics(hDC)
    Graphics.SmoothingMode = SmoothingModeAntiAlias
    Set Pens(1) = CreatePen(ARGB(vbBlack, 192), 2)

    Graphics.DrawLine Pens(1), pt1.X, pt1.Y, pt2.X, pt2.Y

Этот код выводит линии на Form1.
Как мне вывести линии на Picture1?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 17.06.2005 (Пт) 8:57

CreateGraphics(hDC) замени на CreateGraphics(Picture1.hDC)
Изображение

Лёха
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 30.04.2005 (Сб) 9:44

Сообщение Лёха » 17.06.2005 (Пт) 9:09

Спасибо большое tyomitch.
Пошло дело, а то я уже два часа сидел и экспериментировал, а до такого простого не додумался.
Ещё раз спасибо.

Лёха
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 30.04.2005 (Сб) 9:44

Сообщение Лёха » 18.06.2005 (Сб) 6:02

Возникла проблемма.
Дело в том, что если я рисую график маленькими отрезками линий, то сглаживания не происходит.
Лёха.

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 18.06.2005 (Сб) 6:24

Хм. Значит нужно или отрезки делать меньше или линии рисовать не прямые, а дуги. :roll: наверное

Лёха
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 30.04.2005 (Сб) 9:44

Сообщение Лёха » 18.06.2005 (Сб) 6:47

Да в том и дело, что на одном длинном отрезке сглаживание происходит, а сумма коротких отрезков составляющая длинный отрезок "убивает" всё сглаживание.
Лёха.

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 18.06.2005 (Сб) 6:58

Ну логично ! А как же ты хотел. У тебя каждый стык линий - угол.

Прога сглаживания не знает же где у тебя стыки ! Она сглаживает

только то, что вывела за 1 раз. Свою линию. О других то она ничего

не знает :D

Значит, чтобы сгладить, ты должен точки ставить как можно плотнее, тогда и неровностей будет меньше. (Хотя кстати надо глянуть как идёт сглаживание, а то может быть его следы накладываются.)

А вообще поищи там рисование кривых линий. Я не помню есть такое в GDI или нет.


P.S Кстати, а что ты делаешь ? Прогу для рисования графиков. Я в своё время тоже делал. И понял, что меньше одного пикселя всё равно точнее не укажешь и всё это сглаживание убрал. Так что может и тебе то оно не очень нужно. ? :wink:

А вообще - покажи хоть примерчик. Может чего и придумаем ? Людей то много :)

Лёха
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 30.04.2005 (Сб) 9:44

Сообщение Лёха » 18.06.2005 (Сб) 7:27

P.S Кстати, а что ты делаешь ? Прогу для рисования графиков. Я в своё время тоже делал. И понял, что меньше одного пикселя всё равно точнее не укажешь и всё это сглаживание убрал. Так что может и тебе то оно не очень нужно ?

Да как сказать. Не совсем только для рисования графиков. Электронщик я. Собрал датчик, проги для микроконтроллеров написал (их у меня в схеме 3). Написал на VB прогу для приёма данных с датчика через USB и вывода графика на экран и в файл. Дальше идёт расчёт параметров по показаниям датчика. В общем всё почти работает. Только вот "кривость" графики смущает.
Ну всётаки как же рисуют игры и в них хорошая графика?

Jenizix
Географ
Географ
Аватара пользователя
 
Сообщения: 545
Зарегистрирован: 20.04.2004 (Вт) 20:52
Откуда: Москва

Сообщение Jenizix » 18.06.2005 (Сб) 14:18

Ну всётаки как же рисуют игры и в них хорошая графика?

DirectX, Direct3D, DirectDraw или че там еще?
Ушел в себя, вернусь не скоро...

Если вам нужно сделать прозрачной только форму, а контролы на ней нет, то вам сюда!!!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.06.2005 (Пн) 15:33

Рисуй на DC в масштабе, вдвое (вчетверо) большем, чем надо, а затем выводи на DC экрана уменьшая и сглаживая.
Lasciate ogni speranza, voi ch'entrate.

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 20.06.2005 (Пн) 22:58

2 alibek: Хм.... Идея ведь... Надо будет потом попробывать :shock: :D


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot, Yandex-бот и гости: 182

    TopList