1

(CGContext を使用して) UIImage にテキストをオーバーレイしようとしていますが、指定したテキストが表示されません。このコードでは、テキスト引数として指定しています"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()の指定されたエンコーディング パラメータに従って、指定されたテキストを解釈しますCGContextSelectFontkCGEncodingFontSpecificフォントの組み込みエンコーディング (それが何であれ) である を選択しました。

唯一の他の選択肢は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 に答える