1

ブロックの画像の中に数字を書き込もうとしています。これを行う方法を調べていたところ、いくつかの異なる方法を見つけました。問題は、どちらも機能しないことです。これこれを試しましたが、どちらも連絡先ログにエラーが発生しますinvalid context 0x0。誰がそれを引き起こす可能性があるか知っていますか?

編集:

おそらく、これを実装しようとしている場所に言及する必要があります。BlokNSObject を拡張し、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;

}

プログラムに合わせて少し調整しました。残念ながら、これは悪いアクセスエラーを引き起こしているようです...

4

2 に答える 2

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

方法。

于 2012-06-01T17:46:36.163 に答える
0

これを少し長く扱った後、メソッドで UILabel を使用しますdrawRect

編集:メソッドで使用drawAtPointすると、現在は問題なく動作しています。drawRect

于 2012-06-01T21:39:19.293 に答える