А ещё лучше - нарисовать это всё со всякими блендингами и размытием краёв в каком-нибудь иконочном редакторе, сохранить в PNG или новомодном BMP с прозрачностью, и самым пошлейшим образом отрисовывать на bitmap.
_basmp_ Я вообще-то подумал насчет использования типа PT_BEZIERTO для закругления с помощью кривой Безье, но не знаю, как вычислить контрольную точку для нее. Округляет в сторону уменьшения. CyberManiac Как-то не кошерно Y_Mur Не силен в этом. Если не трудно, можно пример?
Relic зачем? гди функции считают точки и соединяют их линиями. если посчитаете точки вы сами и соедините линиями что изменится? возможно это не лучший вариант
_basmp_ То что для гладкости придётся считать достаточно большой массив опорных точек, который будет обрабатываться GDI как ломаная, что в любом случае как минимум некрасиво. Кривая Безье по четырём опорным точкам полюбому лучше, но как ни странно ни гугл ни wiki не сообщили сколько-нибудь толковой информации по методике преобразования произвольного сегмента окружности в эквивалентную безье - чуть попозже запостю эту методику здесь. Да это тоже источник артефактов, я из-за этого в С++ с /QIfist графику компилю.
_basmp_ Дошел до заливки сектора и оказывается, что установка brush никак не влияет на заливку сегмента Надо что-то другое придумывать!
Y_Mur 5-6 на кривую сторону - вполне даже в крупном случае оно всегда так. любая кривая рисуется как ломаная ф принципе что мешает сделать и через безье без приведения? сектор стнет овальным, а вся конструкция - ромашкообразной, что кросивеее
_basmp_ Действительно, теперь обходимся без пятой точки (к 4-й применил тип = PT_LINETO or PT_CLOSEFIGURE). Это хорошо, но заливки-то контура все равно нет! Что с этим делать?
Relic http://www.wasm.ru/forum/viewtopic.php?pid=321473#p321473 Кстати ещё можешь заюзать функцию Pie (в GDI) или DrawPie (в GDI+), а затем закрасить середину контрола кругом, и добавить разделы между секторами с помощью обычных радиальных линий. Если это сделать с предварительной буферизацией изображения, то на взгляд "подтасовку" никто не определит ) Хотя имхо рисовать лишнее, чтобы потом закрашивать это не дзен ) _basmp_ Если это и так то на уровне пикселов, а не на уровне 5-6 сегментов в крупном случае да и вообще некрасивый это подход. Оптимальным для системы в этом случае юзать что-нибудь типа алгоритма Брезенхэма (не знаю есть ли в природе вариант для Безье). Но полюбому win GDI даже на резких перегибах не «халтурит» и рисует с околопиксельной точностью, но даже если бы и халтурила, всё равно кривая Безье это базовый инструмент для рисования кривых и пренебрегать им не стоит
_basmp_ Есть еще выход, это: BeginPath(H); PolyDraw(H, a_pt, a_t, 48); EndPath(H); StrokeAndFillPath(H); Y_Mur Спасибо за инфу.
Y_Mur однопиксельная точность это и есть халтура. каиро пикселя еще дополнительно разбивает на 4, а агг на 10. сравните качество с гди. но рисуют в конечном итоге все именно как ломаные. кстати, насчет брезенхема, в агг есть пример отрисовки окружностей разными способами, включая брезенхема. тс, сравните и прочувствуйте