gpt4 book ai didi

cocoa - 使用核心图形绘制文本

转载 作者:行者123 更新时间:2023-12-03 16:06:12 27 4
gpt4 key购买 nike

我需要将居中文本绘制到 CGContext。

我从 cocoa 方法开始。我用文本创建了一个 NSCell 并尝试这样绘制它:

NSGraphicsContext* newCtx = [NSGraphicsContext
graphicsContextWithGraphicsPort:bitmapContext flipped:true];
[NSGraphicsContext saveGraphicsState];
[NSGraphicsContext setCurrentContext:newCtx];
[pCell setFont:font];
[pCell drawWithFrame:rect inView:nil];
[NSGraphicsContext restoreGraphicsState];

但是 CGBitmapContext 似乎没有渲染文本。可能是因为我必须为 inView: 参数传递 nil。

所以我尝试将文本渲染切换到 Core Graphics:

最简单的方法似乎是使用 CGContextSelectFont 使用其后记名称和点大小来选择字体,但 CGContextShowTextAtPoint 只接受非 unicode 字符,并且没有明显的方法将文本适合矩形:或计算一行文本的范围以手动布置矩形。

然后,就有一个可以创建的CGFont,并设置cia CGContextSetFont。绘制此文本需要 CGContextShowGlyphsAtPoint,但 CGContext 似乎再次缺乏计算生成文本的边界矩形或将文本包装到矩形的函数。另外,如何将字符串转换为 CGGlyphs 数组并不明显。

下一个选项是尝试使用 CoreText 呈现字符串。但是 Core Text 类非常复杂,虽然有示例展示如何在矩形中以指定字体显示文本,但没有示例演示如何计算 CoreText 字符串的边界矩形。

所以:

  • 给定一个 CGFont 和 CGContext,如何计算某些文本的边界矩形,以及如何将文本字符串转换为 CGGlyphs 数组?
  • 给定一个字符串、一个 CGContext 以及一个 postscript 名称和点大小,我需要创建哪些 Core Text 对象来计算字符串的边界矩形,和/或绘制包裹到 CGContext 上的矩形的字符串。
  • 给定一个字符串和一个 NSFont - 如何将字符串渲染到 CGBitmapContext 上?我已经知道如何获取它的范围。

最佳答案

经过四天的搜索,我终于找到了答案。我真的希望苹果能做出更好的文档。那么我们开始吧

我假设您已经有了 CGFontRef。如果不告诉我,我会告诉你如何将 ttf 从资源包加载到 CgFontRef 中。

下面是计算任何字符串与任何 CGFontref 的边界的代码片段

        int charCount = [string length];
CGGlyph glyphs[charCount];
CGRect rects[charCount];

CTFontGetGlyphsForCharacters(theCTFont, (const unichar*)[string cStringUsingEncoding:NSUnicodeStringEncoding], glyphs, charCount);
CTFontGetBoundingRectsForGlyphs(theCTFont, kCTFontDefaultOrientation, glyphs, rects, charCount);

int totalwidth = 0, maxheight = 0;
for (int i=0; i < charCount; i++)
{
totalwidth += rects[i].size.width;
maxheight = maxheight < rects[i].size.height ? rects[i].size.height : maxheight;
}

dim = CGSizeMake(totalwidth, maxheight);

重用相同的函数 CTFontGetGlyphsForCharacters 来获取字形。要从 CGFontRef 获取 CTFontRef,请使用 CTFontCreateWithGraphicsFont() 函数

还请记住,NSFont 和 CGFontRef 是免费桥接的,这意味着它们可以相互转换,并且无需任何额外工作即可无缝工作。

关于cocoa - 使用核心图形绘制文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4386367/

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