作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在尝试精确测量字形边界,但此代码打印出 916!!!它的实际宽度是 69。
- (void)drawRect:(NSRect)dirtyRect {
CGContextRef main = [[NSGraphicsContext currentContext] graphicsPort];
CGContextSetTextMatrix(main, CGAffineTransformIdentity);
CGGlyph g;
CGPoint p = CGPointMake(100, 100);
CGRect rect = CGRectMake(0, 0, 0, 0);
CGFontRef font = CGFontCreateWithFontName((CFStringRef)@"Arial");
g = CGFontGetGlyphWithGlyphName(font, CFSTR("L"));
CGContextSetFont(main, font);
CGContextSetTextPosition(main, 0, 0);
CGContextSetFontSize(main, 200);
CGContextSetRGBFillColor(main, 0, 0, 1, 1);
CGContextShowGlyphsAtPositions(main, &g, &p, 1);
CGFontGetGlyphBBoxes(font, &g, 1, &rect);
printf("%f", rect.size.width);
}
最佳答案
您正在使用CGFontGetGlyphBBoxes
,它返回字形空间单位的大小。要使用它,您需要使用每 em 的单位和字体大小来缩放它。
CGRect rect;
CGFontRef font = CGFontCreateWithFontName((CFStringRef)@"Arial");
CGFloat fontSize = 200.0;
CGGlyph g = CGFontGetGlyphWithGlyphName(font, CFSTR("L"));
CGFontGetGlyphBBoxes(font, &g, 1, &rect);
CGFloat width = rect.size.Width / CGFontGetUnitsPerEm(font) * fontSize;
另一种方法是使用[NSFontboundingRectForCGGlyph:]
。
NSFont *font = [NSFont fontWithName:@"Arial" size:200];
NSRect rect = [font boundingRectForCGGlyph:g];
boundingRectForCGGlyph
Returns the bounding rectangle for the specified glyph, scaled to the receiver’s size.
关于objective-c - CGFontGetGlyphBBoxes 错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50375654/
我一直在尝试精确测量字形边界,但此代码打印出 916!!!它的实际宽度是 69。 - (void)drawRect:(NSRect)dirtyRect { CGContextRef m
我是一名优秀的程序员,十分优秀!