Сглаживание линий в Cocoa Touch - PullRequest
2 голосов
/ 17 апреля 2010

Как бы я сгладить линию (UIBeizerPath) или набор точек? Прямо сейчас это рисует это зазубренно. Я читал о сплайн-интерполяции, может кто-нибудь указать мне на реализацию этого в какао или C или дать мне альтернативный алгоритм сглаживания линий.

Ответы [ 3 ]

2 голосов
/ 27 апреля 2010

Я не думаю, что вам нужно делать пути Безье с кривыми. Вы можете продолжать рисовать отрезки прямых линий, но добавляйте больше точек данных с интерполяцией. Это особенно важно, потому что я предполагаю, что вы хотите сгладить только по одной оси, чтобы у вас не было странных вещей, таких как петли на вашем графике.

Таким образом, вы хотите добавить больше точек к исходным данным между существующими точками и использовать алгоритм интерполяции, более сложный, чем линейная интерполяция. Есть из чего выбирать. Квадратное? Sine основе? Много, и это зависит от того, какие данные вы используете.

1 голос
/ 28 апреля 2010

Я обнаружил, что если вы нарисуете линию или изображение на краю рамки, она будет выглядеть неровной. Переместите линию в несколько раз (или увеличьте размер кадра), и она должна получиться красивой и четкой. Опять же, не уверен, если это ваш вопрос или нет, но это меня несколько раз укусило.

Например, если вы отображаете изображение внутри CALayer, убедитесь, что между изображением и рамкой есть пространство, если вы делаете что-либо, кроме углов 90 градусов.

1 голос
/ 17 апреля 2010

Кварц (который UIKit использует для рисования, и во многих местах позволяет использовать его непосредственно для рисования) имеет встроенную поддержку сглаживания. В большинстве контекстов он уже включен, поэтому вам не следовало рисовать псевдонимы (зазубрины), если вы не отключили сглаживание. Итак, прекрати это делать. : -)

Контексты, в которых он не включен по умолчанию, в основном это те, где это не подходит, например, контексты PDF и CGLayer контексты. Документация подразумевает, что эти контексты даже не поддерживают сглаживание, что имеет некоторый смысл.

CGContext предоставляет несколько функций для включения и выключения сглаживания, но вам никогда не нужно вызывать их, за исключением случаев, когда вы хотите использовать псевдонимы, чего нет. Вы можете попробовать включить его с помощью этих функций; если это сработает, то вам следует выяснить, почему это вообще было отключено.

Вы рисуете путь из CALayer? Может быть поэтому он выключен; есть ключ Info.plist, который необходимо включить, чтобы включить сглаживание по умолчанию в таких контекстах .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...