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

Iphone CGContextSetTextMatrix是否适用于屏幕外位图?,iphone,core-graphics,quartz-graphics,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); CGContextS

我正在使用
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
是否适用于屏幕外位图?也许我做错了什么。

不。正如它的名字所说,文本矩阵只影响文本

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

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


核心图形中没有用不同矩阵替换CTM的功能;你只能把它粘上去。您可以获得CTM,将其反转,并将逆矩阵浓缩到当前矩阵上,以返回到单位矩阵;然后,将所需矩阵连接到该矩阵上,将使该矩阵成为所需矩阵,而不会产生其他影响。然而,没有太多的理由去做这些努力。

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

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

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


核心图形中没有用不同矩阵替换CTM的功能;你只能把它粘上去。您可以获得CTM,将其反转,并将逆矩阵浓缩到当前矩阵上,以返回到单位矩阵;然后,将所需矩阵连接到该矩阵上,将使该矩阵成为所需矩阵,而不会产生其他影响。然而,没有太多的理由去做这些努力。

我遇到了同样的问题,并通过使用以下方法解决了这个问题:

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);

仅供参考。

我遇到了同样的问题,并通过使用以下方法解决:

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);

仅供参考。

彼得,谢谢你的回复,但我很困惑。我正在将文本绘制到屏幕外位图,所以如果我设置CGContextSetTextMatrix,它是否应该正确绘制?我试图在上面解释,即使我设置了矩阵,我从位图上下文中提取的图像的文本也是颠倒的。如果使用CGContextSetTextMatrix直接绘制到屏幕,则我的文本是正确的,但CGContextSetTextMatrix似乎不适用于屏幕外位图。但是,我不相信这是真的。哦,对不起,我误读了。文本矩阵应该总是有效的,不管你画的是什么样的上下文。你能在你的问题中显示更多的代码吗?彼得,谢谢你的回答,但我很困惑。我正在将文本绘制到屏幕外位图,所以如果我设置CGContextSetTextMatrix,它是否应该正确绘制?我试图在上面解释,即使我设置了矩阵,我从位图上下文中提取的图像的文本也是颠倒的。如果使用CGContextSetTextMatrix直接绘制到屏幕,则我的文本是正确的,但CGContextSetTextMatrix似乎不适用于屏幕外位图。但是,我不相信这是真的。哦,对不起,我误读了。文本矩阵应该总是有效的,不管你画的是什么样的上下文。请在你的问题中显示更多的代码好吗?