CGContextFillRects:无效的上下文 - 目标C.

时间:2013-08-07 16:12:39

标签: iphone ios objective-c

我有这段代码可以为我的图像提供我需要的颜色:

    - (UIImage*)convertToMask: (UIImage *) image
{
    UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale);
    CGRect imageRect = CGRectMake(0.0f, 0.0f, image.size.width, image.size.height);

    CGContextRef ctx = UIGraphicsGetCurrentContext();

    // Draw a white background (for white mask)
    CGContextSetRGBFillColor(ctx, 1.0f, 1.0f, 1.0f, 0.9f);
    CGContextFillRect(ctx, imageRect);

    // Apply the source image's alpha
    [image drawInRect:imageRect blendMode:kCGBlendModeDestinationIn alpha:1.0f];

    UIImage* outImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return outImage;
}

在我的第一个视图中一切都很好但是当我将它添加到我的详细视图时,它会给我这个错误(它仍然有效):

  

CGContextSetRGBFillColor:无效的上下文0x0。这是一个严重的错误。该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低。此通知是礼貌的:请解决此问题。在即将到来的更新中,它将成为一个致命的错误。

     

CGContextFillRects:无效的上下文0x0。这是一个严重的错误。这个   应用程序或它使用的库正在使用无效的上下文   从而导致系统稳定性的整体恶化   可靠性。此通知是礼貌的:请解决此问题。它   将在即将到来的更新中成为致命错误。

知道如何摆脱这个错误吗?

感谢。

编辑:

以nil为图像调用动作。我通过添加条件轻松修复它。感谢@ipmcc的评论。

    - (UIImage*)convertToMask: (UIImage *) image
{

    if (image != nil) {

        UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale);
        CGRect imageRect = CGRectMake(0.0f, 0.0f, image.size.width, image.size.height);

        CGContextRef ctx = UIGraphicsGetCurrentContext();

        // Draw a white background (for white mask)
        CGContextSetRGBFillColor(ctx, 1.0f, 1.0f, 1.0f, 0.9f);
        CGContextFillRect(ctx, imageRect);

        // Apply the source image's alpha
        [image drawInRect:imageRect blendMode:kCGBlendModeDestinationIn alpha:1.0f];

        UIImage* outImage = UIGraphicsGetImageFromCurrentImageContext();

        UIGraphicsEndImageContext();

        return outImage;

    }else{

        return image;

    }
}

3 个答案:

答案 0 :(得分:8)

试试这个: 在xcode中,将符号断点添加到 CGPostError 。 (添加符号断点,并添加到符号字段类型 CGPostError

发生错误时,调试器将停止执行代码,您可以检查方法调用堆栈并检查参数。

答案 1 :(得分:0)

// UIImage+MyMask.h

@interface UIImage (MyMask)
- (UIImage*)convertToMask;
@end

// UIImage+MyMask.m

@implementation UIImage (MyMask)
- (UIImage*)convertToMask
{
    UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);
    CGRect imageRect = CGRectMake(0.0f, 0.0f, self.size.width, self.size.height);

    CGContextRef ctx = UIGraphicsGetCurrentContext();

    // Draw a white background (for white mask)
    CGContextSetRGBFillColor(ctx, 1.0f, 1.0f, 1.0f, 0.9f);
    CGContextFillRect(ctx, imageRect);

    // Apply the source image's alpha
    [image drawInRect:imageRect blendMode:kCGBlendModeDestinationIn alpha:1.0f];

    UIImage* outImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return outImage;
}
@end

然后你可以像这样打电话(不需要检查nil):

UIImage *maskImage = [someImage convertToMask];

答案 2 :(得分:0)

据我所知,你用size.width或size.height 0调用UIGraphicsBeginImageContextWithOptions

只需将符号断点添加到CGPostError即可进行检查。