我怎样才能修复CGContextRestoreGState:无效的上下文0x0

这是我正在使用的代码:

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

我继续在控制台中得到错误,我不知道要尝试什么或没有正确完成。

上述错误的确切原因: – 由于当前上下文大小为零,因此您正在将剪辑添加到当前上下文,而这些上下文实际上并不存在。 所以上面的错误经常发生。

所以在上面的函数中检查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 }