gpt4 book ai didi

ios - 使用 CoreText 绘图时禁用混合

转载 作者:行者123 更新时间:2023-11-28 05:44:26 26 4
gpt4 key购买 nike

我正在使用 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 的同时做到这一点?

编辑:有可能this是相关的,但是我相信这个问题仍然有效。这个问题可以用代码明确回答,而以前没有提供代码。我已经将 framesetter 使用的路径四舍五入为积分(以及字体大小)

将在 Swift Playground 中运行的代码的完整要点已发布 HERE

最佳答案

这似乎很明显,但值得重复 CTFrameDraw(_:_:)最终只是对 CGContext 执行操作所以它的文本功能必不可少。

根据您想要的细节,我建议您在 CGContext 上试验字体平滑功能,从 setAllowsFontSmoothing(_:) 开始.

编辑

使用您的 Playground ,我找到了一个特定的解决方案。在绘制文本之前添加 setAllowsAntialiasing:

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

关于ios - 使用 CoreText 绘图时禁用混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55401228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com