Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249

Отрисовка на Canvas "гладкой" наклонной линии

15.06.2014, 20:10. Показов 3801. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Если рисовать линию методом LineTo, то линия получается некрасивая, с видимой глазу зернистостью. А как нарисовать "гладкую" линию?
Также интересует "гладкая" отрисовка прочим элементов - круг, эллипс, прямоугольник с закругленными углами.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.06.2014, 20:10
Ответы с готовыми решениями:

Отрисовка линии на canvas
Только начинаю работать с wpf. Мне нужно создать usercontrol линию на canvas. Рисую линию таким образом: Line MyLine =...

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

Построение гладкой интерполяционной линии со свободными концами
Хотел бы попросить написать хотя бы алгоритм для данной линии просто растерян и не знаю от чего оттолкнуться можно Пока что в режиме...

11
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
15.06.2014, 20:28
DirectX, OpenGL, GDI+ или просто переход на FireMonkey...
Размытие при рисовании на Канве
1
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
15.06.2014, 20:54  [ТС]
Цитата Сообщение от BRcr Посмотреть сообщение
DirectX, OpenGL, GDI+
Я с этим не работал никогда. Можно простой пример отрисовки наклонной линии на канве?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
15.06.2014, 21:42
Пожалуйста.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
    ::Graphics::TBitmap *bmp=new ::Graphics::TBitmap();
 
    bmp->Width=300;
    bmp->Height=300;
 
    Gdiplus::Graphics g(bmp->Canvas->Handle);
 
    Gdiplus::REAL dots[2] = {1, 1};
    Gdiplus::Pen blackPen(Gdiplus::Color(255, 0, 0, 0), 1);
    Gdiplus::Pen greenPen(Gdiplus::Color(255, 0, 255, 0), 10);
    blackPen.SetDashPattern(dots, 2);
 
    for (int i=0; i<30; i++)
    {
        g.DrawLine(&blackPen, i*10, 0, i*10, 300);
        g.DrawLine(&blackPen, 0, i*10, 300, i*10);
    }
 
    Gdiplus::REAL dashValues[4] = {4, 2, 2, 2};
    Gdiplus::Pen pen2(Gdiplus::Color(255, 175, 0, 0), 2);
    Gdiplus::Pen pen3(Gdiplus::Color(255, 0, 175, 0), 2);
 
    pen2.SetDashPattern(dashValues, 4);
    pen3.SetDashPattern(dashValues, 4);
    g.SetSmoothingMode(Gdiplus::SmoothingModeAntiAlias);
    for (int i=0; i<10; i++)
    {
        g.DrawLine(&pen2, 5+i*10, 5, i*25, i*35);
    }
    for (int i=0; i<10; i++)
    {
        g.DrawLine(&pen3, 5, 5+i*10, i*35, i*15);
    }
    Img->Picture->Bitmap->Assign(bmp);
    delete bmp;
Как сделать сглаживание Ellipse?
Сглаживание изображения
GDI+ and C++Builder
1
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
15.06.2014, 23:14  [ТС]
Цитата Сообщение от BRcr Посмотреть сообщение
Пожалуйста.
Попробовал ваш код, просто скопировав его в обработчик нажатия на кнопку. Разместил на форме компонент TImage с именем Img. Как подключать GDI к проекту я не знаю, взял для пробы с одной из ссылок, что вы дали:
C++
1
2
3
4
5
6
#define STRICT
#pragma option -w-hid
#include <windows.h>
#include <GdiPlus.h>
#pragma comment(lib, "GdiPlus.lib") // для статик линковки
#pragma option -whid
Ну и вообщем по нажатию на кнопку никаких линий не нарисовалось, только Image окрасился в белый цвет.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.06.2014, 23:42
Пример https://www.cyberforum.ru/blog... og477.html
0
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
16.06.2014, 00:51  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Пример
Я как раз по этому примеру подключал GDI, но сами действия там немного не те, что мне нужны. Мне интересно, неужели весь тот код, что привел выше BRcr, нужен для отрисовки простой линии?
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
16.06.2014, 00:59
Цитата Сообщение от Нитонисе Посмотреть сообщение
что привел выше BRcr, нужен для отрисовки простой линии?
Инициализация gdi+, установка сглаживания(антиалиаса),установка пера и собственно рисование линии, денинициализация gdi+ - все.

Добавлено через 1 минуту
Цитата Сообщение от Нитонисе Посмотреть сообщение
Мне интересно, неужели весь тот код, что привел выше BRcr, нужен для отрисовки простой линии?
Там много линий рисуется, да и сколько там того кода ?
0
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
16.06.2014, 01:16  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
да и сколько там того кода ?
Ну по сравнению с Canvas->LineTo - много

Я бы хотел понять, стоит ли мне для своей задачи применять GDI... Может подскажете? Как бы это не оказалось неоправданным. Я делаю программку для рисования математических формул. Программа принимает текстовую строку в специальном формате, а выдает картинку с нарисованной формулой. Например обработав строку "frac{1}{2}", программа рисует нормальную дробь с числителем "1" и знаменателем "2". Вот чтобы многие математические операторы смотрелись покрасивше - я и задумался о способе сглаживания линий. Стоит ли ради этого разбираться с GDI или это стрельба из пушки по воробьям?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
16.06.2014, 01:21
Цитата Сообщение от Нитонисе Посмотреть сообщение
Стоит ли ради этого разбираться с GDI или это стрельба из пушки по воробьям?
Это уж тебе решать. Разберешься - будет и красиво, и опыт приобретешь. Нет - так нет, время и силы сэкономишь.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
16.06.2014, 01:34
Нитонисе, Думаю у тебя не других альтернатив, VCL стара для нормального рисования.

Добавлено через 3 минуты
Цитата Сообщение от Нитонисе Посмотреть сообщение
Ну по сравнению с Canvas->LineTo - много
Вообще-то две команды
C++
1
2
Canvas->MoveTo()
Canvas->LineTo()
Против одной
C++
1
g.DrawLine();
Добавлено через 4 минуты
Лично я делал так в одном проекте (но это вариант тебе вероятно не подойдет из-за сложности):
делал абстрактный класс - в нем нужный набор инструментов рисования, от него наследовался и реализовал один класс для на VCL другой на GDI+, и потом можно было сравнить, меняя класс, с минимум изменений в программе.
0
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
16.06.2014, 01:34  [ТС]
Цитата Сообщение от BRcr Посмотреть сообщение
Это уж тебе решать. Разберешься - будет и красиво, и опыт приобретешь. Нет - так нет, время и силы сэкономишь
Красивости и опыт - это ясно. Вопрос немного в другом. Является ли оптимальным для решения такого рода задач, что я описал, применение GDI, либо же есть что-то более адекватное задаче? Вот у вас в первом сообщении вроде как много всяких альтернатив: DirectX, OpenGL... ну FireMonkey вообщем-то не рассматриваю из-за ограниченности в некоторых нужных мне моментах.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.06.2014, 01:34
Помогаю со студенческими работами здесь

Рисование линии мышью на BufferedImage и отрисовка нарисованной линии в JPanel
Здравствуйте. Вопрос: как рисовать линию мышью на BufferedImage (или Image), а потом всё нарисованное на BufferedImage отрисовать на...

Отображения движения ромба вдоль наклонной линии
Создать программу для отображения движения ромба вдоль наклонной линии в прямом и обратном направлении с помощью класса Canvas (функции...

Отрисовка canvas
подскажите, как отрисовать такую https://cdn.wink.org/#/platform/dice-dice стрелку в разделе Moon через canvas? пока набросал вот...

Отрисовка потоком в Canvas
Доброго времени суток. В общем ситуация такова: есть таймер, работающий с точностью в 10мс в отдельном потоке. В зависимости от времени, на...

Отрисовка фото на Canvas
Пытаюсь загрузить фото двумя методами 1 напрямую 2 через функцию в 1 получаю визуально рисунок во 2 рисунка нет Проверял...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
ПЛИС
zxcha1ka_ 27.01.2026
AHDL Разработать программы для синтеза следующих устройств: 1. Параллельного регистра 4-х разрядного с синхронной загрузкой и асинхронным сбросом (обнулением); Пoмoгитe пoжaлyйстa
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru