Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для Пытливый
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622

Эксперименты с Gdi+

03.06.2022, 13:54. Показов 2518. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу нарисовать вот такой компонент.
Название: Speed.png
Просмотров: 168

Размер: 18.9 Кб
Готового примитива, для рисования части сектора я не нашел, а потому рисую его используя примитивы из Path. Т.е. Дуга в одну сторону, затем дугу чуть меньшего радиуса обратно. Получаю массив координат фигуры. На этом этапе получаю вот такую штуку:
Название: Speed1.png
Просмотров: 167

Размер: 1.3 Кб
Это ожидаемо, т.к. кривые были заменены отрезками, а потому применяю функцию разложение кривых на отрезки и получаю уже такую фигуру:
Название: Speed2.png
Просмотров: 169

Размер: 1.1 Кб
Уже неплохо, но можно лучше, если сгладить ступеньки:
Название: Speed3.png
Просмотров: 167

Размер: 3.0 Кб
Но если присмотреться, то видно, что круг несколько угловатый и если вывести окружность рядом, то это становится видно:
Название: Speed4.png
Просмотров: 169

Размер: 4.5 Кб
Код рисования такой:
Кликните здесь для просмотра всего текста
Delphi
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
procedure TForm1.FormPaint(Sender: TObject);
var
  Graphics: TGPGraphics;
  Pen: TGPPen;
  Brush: TGPBrush;
  Path: TGPGraphicsPath;
  Points: Array of TGPPoint;
  Count: Integer;
begin
  Graphics := TGPGraphics.Create(Canvas.Handle);
  Graphics.SetSmoothingMode(SmoothingModeAntiAlias);
  Pen := TGPPen.Create(MakeColor(132,27,45));
  Brush := TGPSolidBrush.Create(MakeColor(179,33,52));
  Path := TGPGraphicsPath.Create;
  Path.AddArc(100,100,200,200,120,300);
  Path.AddArc(120,120,160,160,60,-300);
  Path.Flatten;
  Count := Path.GetPointCount;
  SetLength(Points, Count);
  Path.GetPathPoints(PGPPoint(Points), Count);
 
  Graphics.DrawPolygon(Pen, PGPPoint(Points), Count);
  Graphics.FillPolygon(Brush, PGPPoint(Points), Count);
  Graphics.DrawEllipse(Pen,TGPRect(Rect(96,96,208,208)));
  Path.Free;
  Brush.Free;
  Pen.Free;
  Graphics.Free;
end;

И вот вопрос, как повысить качество скругления? Видимо параметры в Path.Flatten решают эту проблему, но мои эксперименты с ними только ухудшали качество.
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.06.2022, 13:54
Ответы с готовыми решениями:

Есть ли в WPF полноценная замена GDI+? Чтобы можно было всё, что можно в GDI+? Просто думаю углубляться в работу с изображениями в WPF или GDI.
Ну собственно весь вопрос в заголовке темы.

По умолчанию при создании приложения Windows Forms стоит gdi или gdi+
И если обычный gdi - как между ними переключиться?

Выбор между GDI / GDI+ / CreateWindow
Приветствую. У меня накопилось несколько вопросов и я был бы очень рад получить на них ответ. Я хочу создать программу-виджет которая...

21
 Аватар для Пытливый
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
07.06.2022, 13:16  [ТС]
Студворк — интернет-сервис помощи студентам
Да, как я и подозревал, не используется в GDI+ аппаратные возможности графической карты и как оказалось градиентная заливка очень затратна для проца. Я в демке использовал линейную заливку и это уже нагружает проц, но использование заливки по произвольному пути вдвое увеличивает эту нагрузку и это печально, ведь удобная и мощная по возможностям штука.
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
07.06.2022, 16:58
как ни старайся, GDI+ это лет на 10 уже технология отжившая
собсно поэтому для высоконагруженной графики кроме FMX ничего и не будет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.06.2022, 16:58

Автономная библиотека GDI и GDI+
Понадобилось как то подключить к проекту функции GDI+ стал гуглить описание одной из этих функций и наткнулся на сайт ...

Эксперименты
Помогите пожалуйста. Нужно проделать все эксперименты. Желательно в Delphi 7 или в другой версии, но чтобы работало в Delphi 7

Эксперименты с директом
На днях провел ряд экспериментов с размещением объявлений в директе и вот что получил. Самый главный эксперимент. Размещал объявления...

Эксперименты с настройками
Хочу опробовать тонкие настройки делфи но боюсь повредить настройкам по умолчанию. Есть идея вторично установить мою версию делфей по...

Эксперименты с установкой ОС
Баловство конечно, но мне интересно. Эксперимент провожу на виртуалке. Взял установочный диск (образ). Выкинул с него абсолютно все!...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru