CGContextSetTextMatrix是否适用于屏幕外位图?

时间:2010-08-09 14:11:21

标签: iphone core-graphics quartz-graphics

我正在使用CGBitmapContextCreate()的上下文在屏幕外创建图像。

在绘制文字时,我尝试使用:

CGContextSetTextMatrix(contextRef, CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0));

但我的文字仍然颠倒了。如果我使用标准转换它是正确的:

CGContextTranslateCTM(contextRef, 0.0, contextRect.size.height);
CGContextScaleCTM(contextRef, 1.0, -1.0);

我的问题是CGContextSetTextMatrix是否适用于屏幕外位图?也许我做错了什么。

2 个答案:

答案 0 :(得分:0)

没有。正如其名称所示,文本矩阵仅影响文本。

所有绘图都通过当前的变换矩阵,只有文本也会通过文本矩阵。因此,对于任何非文本的内容,您需要更改CTM。

你可以使用CGContextConcatCTM函数在一个函数调用中将翻转矩阵连接到CTM上,尽管我会发现translate + scale更容易阅读。请注意,将一个矩阵连接到另一个矩阵与使用新矩阵替换旧矩阵不同。

在Core Graphics中没有用不同矩阵替换CTM的功能;你只能连接它。您可以获取CTM,将其反转,并将逆矩阵连接到当前矩阵上以返回单位矩阵;然后,将您想要的矩阵连接到那将导致矩阵成为您想要的矩阵而没有其他影响。但是,没有太多理由去做所有这些努力。

答案 1 :(得分:0)

我遇到了同样的问题,并通过使用:

解决了
CGContextTranslateCTM(context, 0.0, rect.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
......
CGGlyph glyphs[text.length];
CTFontRef fontRef = CTFontCreateWithName((__bridge CFStringRef)(fontName), fontSize, NULL);
CTFontGetGlyphsForCharacters(fontRef, (const unichar*)[text cStringUsingEncoding:NSUnicodeStringEncoding], glyphs, text.length);
CGContextShowGlyphsAtPoint(context, destX, destY, (const CGGlyph *)glyphs, ce.text.length);

仅供参考。