ブロックの画像の中に数字を書き込もうとしています。これを行う方法を調べていたところ、いくつかの異なる方法を見つけました。問題は、どちらも機能しないことです。これとこれを試しましたが、どちらも連絡先ログにエラーが発生しますinvalid context 0x0
。誰がそれを引き起こす可能性があるか知っていますか?
編集:
おそらく、これを実装しようとしている場所に言及する必要があります。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]];
}
メソッド呼び出しは、H2CO3 によって与えられる、以下に示すメソッドに対するものです。
- (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;
}
プログラムに合わせて少し調整しました。残念ながら、これは悪いアクセスエラーを引き起こしているようです...