8

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

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

    }
}
4

3 回答 3

8

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

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

于 2014-02-25T08:19:35.073 回答
0

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

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

于 2014-03-10T20:37:17.157 回答
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];
于 2014-02-25T08:36:08.327 回答