1

我只是想在 UIImage 中覆盖文本(使用 CGContext),但它没有显示我指定的文本。在这段代码中,我作为文本参数给出,"Hello"但它显示“eÉääc”。我不知道发生了什么我认为角色被取代了,但我不知道如何解决它。这是我的代码:

UIGraphicsBeginImageContextWithOptions(image.size, YES, 0);
CGContextRef c = UIGraphicsGetCurrentContext();
[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];
CGContextSetTextMatrix(c, CGAffineTransformMake(1.0, 0, 0, -1.0, 0, 0));
CGContextSelectFont(c, "ArialMT", 50, kCGEncodingFontSpecific);
CGContextSetRGBStrokeColor(c, 255, 0, 0, 1);
CGContextSetRGBFillColor(c, 255, 0, 0, 1);
CGContextSetCharacterSpacing(c, 2);
CGContextShowTextAtPoint(c,100,100, "Hello", 5);
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

我正在使用西班牙语键盘(我不知道这是否重要),而 iPad(我正在测试应用程序的地方)是加泰罗尼亚语。

4

1 回答 1

0

CGContextShowTextAtPoint()根据 的指定编码参数解释给定的文本CGContextSelectFont。您选择kCGEncodingFontSpecific了 ,这是字体内置编码(无论是什么)。

唯一的其他选择是kCGEncodingMacRoman

CGContextSelectFont(c, "ArialMT", 50, kCGEncodingMacRoman);

然后,只要您只使用 ASCII 字符集中的字符,您的文本就应该正确显示。

对于非 ASCII 字符,您必须将字符串转换为 MacRoman 编码,例如https://stackoverflow.com/a/13743834/1187415示例。

请注意,CGContextShowTextAtPoint 它不能显示一般的 Unicode 字符串,甚至会出现欧元 (€) 字符的问题。的 drawAtPoint:withFont:方法NSString没有这些限制。

于 2013-02-06T13:54:21.527 回答