2012-06-01 4 views
1

Я пытаюсь записать число внутри изображения блока. Я искал, как это сделать, и я нашел пару разных способов сделать это. Проблема в том, что ни одна из них не работает. Я пробовал this и this, но они оба вызывают ошибку в журнале контактов, который говорит invalid context 0x0. Кто-нибудь знает, что может это сделать?Написание текста в UIImage

EDIT:

я, вероятно, следует упомянуть, где я пытаюсь осуществить это. У меня есть класс под названием Blok, который расширяет NSObject и содержит UIImage. Этот UIImage используется в методе drawRect другого класса, а также я хочу, чтобы текст был включен.

Вот где я инициализировать изображение:

-(id)initWithType:(NSString*)theType andSymbol:(NSString*)theSymbol { 

    self = [super init]; 
    if (self) { 

     image = [[UIImage alloc] init]; 

     type = theType; 
     symbol = theSymbol; 
    } 
    return self; 
} 

А вот где он получает набор позже:

-(void)setImage:(UIImage*)theImage { 

    image = theImage; 

    image = [self addText:symbol atPoint:CGPointMake(0, 0) withFont:[UIFont fontWithName:@"Helvetica" size:12] ofColor:[UIColor blackColor]]; 

} 

Вызов метода является способом, показанным ниже, дается Н2СО3:

- (UIImage *) addText: (NSString *) str atPoint: (CGPoint) point withFont: (UIFont *) font ofColor: (UIColor *) color { 

    int w = image.size.width; 
    int h = image.size.height; 

    // create empty bitmap context 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGContextRef ctx = CGBitmapContextCreate (NULL, w, h, 8, w * 4, colorSpace, kCGImageAlphaPremultipliedFirst); 
    CGContextSetInterpolationQuality (ctx, kCGInterpolationHigh); 

    // draw the image and the text on the bitmap context 
    CGContextDrawImage (ctx, CGRectMake (0, 0, h, w), image.CGImage); 
    char *text = (char *)[str cStringUsingEncoding: NSASCIIStringEncoding]; 
    CGContextSetTextDrawingMode (ctx, kCGTextFill); 
    CGFloat *comp = CGColorGetComponents ([color CGColor]); 
    CGContextSetRGBFillColor (ctx, comp[0], comp[1], comp[2], comp[3]); 
    CGContextSelectFont (ctx, [[font fontName] UTF8String], [font pointSize], kCGEncodingMacRoman); 
    CGContextShowTextAtPoint (ctx, point.x, h - point.y, text, strlen (text)); 

    // get the image as a UIImage and clean up 
    CGImageRef imageMasked = CGBitmapContextCreateImage (ctx); 
    UIImage *img = [UIImage imageWithCGImage: imageMasked]; 
    CGContextRelease (ctx); 
    CGImageRelease (imageMasked); 
    CGColorSpaceRelease (colorSpace); 

    return img; 

} 

Я немного изменил его в соответствии с программой. К сожалению, это, кажется, вызывает плохое сообщение об ошибке доступа ...

ответ

0

После этого немного дольше, чем хотелось бы, я просто собираюсь использовать UILabel в методе drawRect.

EDIT: Использование drawAtPoint в методе drawRect, работая сейчас отлично.

2

Посмотрите, как я реализовал это здесь: https://github.com/H2CO3/UIImage-Editor/blob/master/UIImage%2BEditor.m

Особенно, обратите внимание на метод

- (UIImage *) addText: (NSString *) str atPoint: (CGPoint) point withFont: (UIFont *) font ofColor: (UIColor *) color 

.

+0

Хорошо, это, казалось, сработало. Ему не понравилось преобразование CGAffineTransform = [self transformForOrientation: self.size]; ', поэтому я взял его вместе с строками, которые ссылались на него. Тем не менее, удержал линию drawImage. Он прошел мимо этого без каких-либо реальных проблем, но теперь я получаю ужасную ошибку 'EXC_BAD_ACCESS'> _ <Я приму свой ответ, когда смогу обойти эту ошибку ... – RaysonK

+0

И когда и где эта ошибка возникает? Ошибка, конечно, не в моем коде, поскольку она протестирована и используется несколько раз. Я помогу вам решить эту проблему, но вам нужно предоставить дополнительную информацию. –

+0

В этом проблема, я не могу точно определить ту часть, где она вызывает ошибку. Я прошел через отладчик, и похоже, что программа работает нормально, но она попадает в строку кода фона (а не код, который я пишу, но материал «под капотом»), который вызывает ошибку. – RaysonK

Смежные вопросы