4

これは私が取り組んでいるコードです:

    CGRect imageRect = CGRectMake(0, 0, oldImage.size.width, oldImage.size.height);

    CGRect newRect = imageRect;

    UIGraphicsBeginImageContextWithOptions(newRect.size, NO, oldImage.scale);
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextScaleCTM(ctx, 1, -1);
    CGContextTranslateCTM(ctx, 0, -(newRect.size.height));
    CGContextSaveGState(ctx);
    CGContextClipToMask(ctx, newRect, oldImage.CGImage);
    CGContextSetFillColorWithColor(ctx, [UIColor colorWithWhite:0 alpha:0].CGColor);
    CGContextFillRect(ctx, newRect);
    CGContextRestoreGState(ctx);
    CGContextClipToMask(ctx, imageRect, oldImage.CGImage);

    CGContextSetFillColorWithColor(ctx, tintColor.CGColor);

    CGContextFillRect(ctx, imageRect);
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

コンソールに引き続きエラーが表示されます。何を試せばよいのか、何が正しく行われていないのかわかりません。

4

1 に答える 1

0

上記のエラーの正確な原因:- 現在のコンテキスト サイズがゼロであるため、実際には存在しない現在のコンテキストにクリップを追加しています。そのため、上記のエラーが頻繁に発生します。

したがって、上記の関数に oldImage が存在するかどうかを確認してください。

更新されたコードは次のようになります。

    if ( oldImage = [UIImage imageNamed:@"oldImage.png"]) {

        CGRect imageRect = CGRectMake(0, 0, oldImage.size.width, oldImage.size.height);
        CGRect newRect = imageRect;
        UIGraphicsBeginImageContextWithOptions(newRect.size, NO, oldImage.scale);
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        CGContextScaleCTM(ctx, 1, -1);
        CGContextTranslateCTM(ctx, 0, -(newRect.size.height));
        CGContextSaveGState(ctx);
        CGContextClipToMask(ctx, newRect, oldImage.CGImage);
        CGContextSetFillColorWithColor(ctx, [UIColor colorWithWhite:0 alpha:0].CGColor);
        CGContextFillRect(ctx, newRect);
        CGContextRestoreGState(ctx);
        CGContextClipToMask(ctx, imageRect, oldImage.CGImage);
        CGContextSetFillColorWithColor(ctx, tintColor.CGColor);
        CGContextFillRect(ctx, imageRect);
        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext(); 
     }
     else {
     //image do not exist
     // Unable to change into New Image
}
于 2016-12-21T11:28:54.027 に答える