绘制到 CGBitmapContext 时丢失 NSTextEffectLetterpressStyle
Losing NSTextEffectLetterpressStyle when drawing into CGBitmapContext
我在纯色背景上绘制文本,当它出现时,应用于属性字符串的 NSTextEffectLetterpressStyle
效果没有显示 - 您只能看到文本颜色,看不到提供所需外观的附加白色轮廓。它看起来基本上与我没有应用凸版效果完全一样。为什么会这样,如何正确绘制凸版文字效果?
let bitmapContext = CGBitmapContextCreate(nil, UInt(imageRect.width), UInt(imageRect.height), UInt(8), UInt(imageRect.width * 16), CGColorSpaceCreateDeviceRGB(), CGBitmapInfo(CGImageAlphaInfo.PremultipliedLast.rawValue))
CGContextSetFillColorWithColor(bitmapContext, UIColor.blackColor().CGColor)
let fullBox = CGRectMake(0, 0, imageRect.width, imageRect.height)
CGContextAddRect(bitmapContext, fullBox)
CGContextFillPath(bitmapContext)
CGContextSetTextDrawingMode(bitmapContext, kCGTextFill)
CGContextSetTextPosition(bitmapContext, drawPoint.x, drawPoint.y)
let coloredAttributedString = NSAttributedString(string: "20", attributes:[NSFontAttributeName: myFont, NSForegroundColorAttributeName: textColor, NSTextEffectAttributeName: NSTextEffectLetterpressStyle])
let displayLineTextColored = CTLineCreateWithAttributedString(coloredAttributedString)
CTLineDraw(displayLineTextColored, bitmapContext)
let cgImage = CGBitmapContextCreateImage(bitmapContext)
var myImage = CIImage(CGImage: dateStampCGImage)
这是结果:
这是我的预期(注意白色轮廓):
CFAttributedString
和 NSAttributedString
都可以将任意属性应用于范围。属性字符串类型本身并不解释属性。
相反,字符串绘制技术解释了属性。 Core Text 理解一组不同于 UIKit 或 AppKit 的属性。 Core Text 支持的属性集已记录 here。它没有列出(相当于)NSTextEffectAttributeName
.
如果您使用 UIGraphicsBeginImageContextWithOptions()
设置当前图形上下文并使用 NSAttributedString
绘图方法绘制到其中,那应该可以工作,因为它使用 UIKit 进行绘图。
我在纯色背景上绘制文本,当它出现时,应用于属性字符串的 NSTextEffectLetterpressStyle
效果没有显示 - 您只能看到文本颜色,看不到提供所需外观的附加白色轮廓。它看起来基本上与我没有应用凸版效果完全一样。为什么会这样,如何正确绘制凸版文字效果?
let bitmapContext = CGBitmapContextCreate(nil, UInt(imageRect.width), UInt(imageRect.height), UInt(8), UInt(imageRect.width * 16), CGColorSpaceCreateDeviceRGB(), CGBitmapInfo(CGImageAlphaInfo.PremultipliedLast.rawValue))
CGContextSetFillColorWithColor(bitmapContext, UIColor.blackColor().CGColor)
let fullBox = CGRectMake(0, 0, imageRect.width, imageRect.height)
CGContextAddRect(bitmapContext, fullBox)
CGContextFillPath(bitmapContext)
CGContextSetTextDrawingMode(bitmapContext, kCGTextFill)
CGContextSetTextPosition(bitmapContext, drawPoint.x, drawPoint.y)
let coloredAttributedString = NSAttributedString(string: "20", attributes:[NSFontAttributeName: myFont, NSForegroundColorAttributeName: textColor, NSTextEffectAttributeName: NSTextEffectLetterpressStyle])
let displayLineTextColored = CTLineCreateWithAttributedString(coloredAttributedString)
CTLineDraw(displayLineTextColored, bitmapContext)
let cgImage = CGBitmapContextCreateImage(bitmapContext)
var myImage = CIImage(CGImage: dateStampCGImage)
这是结果:
这是我的预期(注意白色轮廓):
CFAttributedString
和 NSAttributedString
都可以将任意属性应用于范围。属性字符串类型本身并不解释属性。
相反,字符串绘制技术解释了属性。 Core Text 理解一组不同于 UIKit 或 AppKit 的属性。 Core Text 支持的属性集已记录 here。它没有列出(相当于)NSTextEffectAttributeName
.
如果您使用 UIGraphicsBeginImageContextWithOptions()
设置当前图形上下文并使用 NSAttributedString
绘图方法绘制到其中,那应该可以工作,因为它使用 UIKit 进行绘图。