iOS:CGContext SetTextDrawingMode不同的字符导致崩溃/没有文字绘制

时间:2013-07-02 11:33:17

标签: ios cgcontext uifont cgcontextdrawimage

我正在使用这些功能在图像上绘制文字:

char* text = (char *)[text1 cStringUsingEncoding:NSASCIIStringEncoding];
CGContextSelectFont(context, "Helvetica", fontSize, kCGEncodingMacRoman);
CGContextSetTextDrawingMode(context, kCGTextFill);
CGContextSetRGBFillColor(context, 0.0, 0.1, 0.1, 1);
CGContextShowTextAtPoint(context, 5, 20, text, strlen(text));

它工作正常,除非我有“ü”,“ö”,“ä”等字符与strlen一起使用 - 它会导致崩溃。所以我尝试在此行

之前使用此字符串来获取字符串的长度
char* text = (char *)[text cStringUsingEncoding:NSASCIIStringEncoding];
by doing this:
int length = [text length];
and then replace strlen(text) with length.

它不会导致崩溃,但不会绘制任何文本。我认为这里的罪魁祸首是角色。 我试过了两个

kCGEncodingMacRoman
kCGEncodingFontSpecific

但没有任何帮助。你能用我吗?谢谢。

更新: @Martin R:

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, 90.0f, 90.0f, 8, 4 * 90.0f, colorSpace,     kCGImageAlphaPremultipliedFirst);
CGContextDrawImage(context, CGRectMake(0, 0, 90.0f, 90.0f), img.CGImage);

CGContextSetTextDrawingMode(context, kCGTextFill);
CGContextSetRGBFillColor(context, 0.8, 0.1, 0.1, 1);
[text1 drawAtPoint:(CGPoint){5, 20} withFont:[UIFont fontWithName:@"Helvetica" size:10.0f]];
CGImageRef finalImage = CGBitmapContextCreateImage(context);

CGContextRelease(context);
CGColorSpaceRelease(colorSpace);

UIImage *image = [UIImage imageWithCGImage:finalImage];
CGImageRelease(finalImage);

return image;

1 个答案:

答案 0 :(得分:1)

CGContextShowTextAtPoint()根据CGContextSelectFont()的指定编码参数解释给定文本,在您的情况下为Mac Roman。所以你应该 使用

转换字符串
NSString *string = @"äöü";
const char *text = [string cStringUsingEncoding:NSMacOSRomanStringEncoding];

或者,您可以使用drawAtPoint:withFont:的{​​{1}}方法 自动处理Unicode字符:

NSString