Отключить смешивание при рисовании с CoreText - PullRequest
1 голос
/ 28 марта 2019

Я рисую черный текст на сером фоне, используя CoreText.Кажется, что система автоматически смешивает глифы, я хотел бы отключить это поведение, если это возможно, но я не уверен, как.

Это увеличенный снимок экрана в верхней части буквыL. это смешивание, которое я хотел бы отключить

enter image description here

Код чертежа выглядит так:

let para = NSMutableParagraphStyle()
    para.alignment = .center

    let attrString = NSAttributedString(string: Configuration.trainString,
                                        attributes:  [
                                            .font:UIFont.boldSystemFont(ofSize: size.height*0.8),
                                            .paragraphStyle:para
        ])

    let framesetter = CTFramesetterCreateWithAttributedString(attrString as CFAttributedString)

    let frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, attrString.length), path, nil)

    CTFrameDraw(frame, ctx)

    let cgImage = ctx.makeImage()

    return cgImage

естьспособ сделать это, все еще используя CoreText?

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

, полный текст кода, который будет выполняться на игровой площадке Swift, опубликован ЗДЕСЬ

1 Ответ

1 голос
/ 29 марта 2019

Это может показаться очевидным, но стоит повторить, что CTFrameDraw(_:_:) в конечном итоге просто выполняет операции над CGContext, поэтому его текстовые функции имеют важное значение.

В зависимости от того, что вы хотите, я предлагаю вам поэкспериментировать с функциями сглаживания шрифтов на CGContext, начиная с setAllowsFontSmoothing(_:).

EDIT

Используя вашу игровую площадку, я нашел конкретное решение. Добавьте setAllowsAntialiasing непосредственно перед рисованием текста:

ctx.setAllowsAntialiasing(false)
CTFrameDraw(frame, ctx)
...