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

标签 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

但没有任何帮助。你能给我这个吗?谢谢。

更新: @马丁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;

最佳答案

CGContextShowTextAtPoint() 根据 CGContextSelectFont() 的指定编码参数解释给定的文本,在您的例子中是 Mac Roman。所以你应该 使用

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

或者,您可以使用 NSStringdrawAtPoint:withFont: 方法,它 自动处理 Unicode 字符:

NSString *string = @"äöü€";
[string drawAtPoint:CGPointMake(5, 20) withFont:[UIFont fontWithName:@"Helvetica" size:12]];

关于iOS:CGContext SetTextDrawingMode 不同字符导致崩溃/没有绘制文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17424501/

相关文章:

ios - 将文件从 ios 应用程序传输到 PC 上运行的应用程序

ios - Objective C - 在代码中创建的对象在切换 View Controller 后消失

ios - 使用 Decodable 解析 JSON 返回空模型

ios - 在 iOS 上显示按比例间隔的数字(而不是等宽/表格)

iphone - 将 iPad 应用程序转换为 iPhone 5

ios - 为什么我的 Core Graphics 绘图代码运行缓慢?

objective-c - 使用 CGContext 绘制后删除

ios - 如何在 draw(_ rect : CGRect) in Swift 中使用不同的混合模式绘制 UILabel

ios - 方法 'fontWithName(_:size:)' 与 Objective-C 选择器冲突

ios - 调整 UILabel 的字体,使文本适合标签的边界