2013-07-02 1 views
0

을 그려 원인 SetTextDrawingMode :아이폰 OS : CGContext는 다른 문자가 충돌/텍스트가 내가 이미지 위에 텍스트를 그릴 이러한 기능을 사용하고

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

그것은 내가 같은 "U"로 문자가있는 경우를 제외하고 잘 작동 " ö ","ä "등을 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 : UPDATED

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; 
+0

내가 오타 또는 복사/붙여 넣기 있다고 가정 : 그래서 당신은

NSString *string = @"äöü"; const char *text = [string cStringUsingEncoding:NSMacOSRomanStringEncoding]; 

또는 사용하여 문자열을 변환해야합니다, 당신은 자동으로 유니 코드 문자를 처리 NSStringdrawAtPoint:withFont: 방법을 사용할 수 있습니다 'char * text = (char *) [text ...]'의 양쪽에'text'를 사용했다는 오류가 있습니까? –

답변

1

CGContextShowTextAtPoint()는 귀하의 경우 맥 로마입니다 CGContextSelectFont()의 지정된 인코딩 매개 변수에 따라 지정된 텍스트를 해석합니다.

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

@Unheilig : CGContextShowTextAtPoint()가 아닙니다. CGContextSelectFont()의 경우 kCGEncodingFontSpecific (매우 쓸모없는)과 kCGEncodingMacRoman (일본어 문자를 포함하지 않고 Euro/€ 문자 등의 문제가 있음) 만 선택할 수 있습니다. - 적절한 해결책은 drawAtPoint : withFont :를 사용하는 것입니다. –

+0

@Unheilig : 업데이트 된 답변보기. 그러나 방향이 다르므로 변형 행렬을 수정해야 할 수도 있습니다. –

+1

@Unheilig : 1) 예, 모든 유니 코드 문자 (글꼴에서 사용 가능한 경우)와 함께 작동합니다. - 2)'drawAtPoint' 솔루션을 테스트했을 때, 텍스트는'CGContextShowTextAtPoint()'메소드에 비해 거꾸로되어있었습니다. 아마도 프로젝트에서 먼저 시도해보십시오. –

관련 문제