2013-08-07 4 views
8

У меня есть этот кусок кода, чтобы дать моим изображениям цвет мне нужно:CGContextFillRects: недопустимый контекст - 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. Это серьезная ошибка. Это приложение или используемая им библиотека использует недопустимый контекст и составляет , тем самым способствуя общей деградации стабильности системы и надежности . Это уведомление является любезностью: устраните эту проблему. Это станет фатальной ошибкой в ​​предстоящем обновлении.

Любая идея, как избавиться от этой ошибки?

Спасибо.

EDIT:

Акция была вызвана с нуля для изображения. Я легко исправил это, добавив условие. Спасибо @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; 

    } 
} 
+1

Третий идентичный вопрос в течение двух дней, второй сегодня. –

+1

Ваше изображение 'nil'? IIRC, контекст будет 'nil', если вы передадите 0 по высоте, ширине или шкале в' UIGraphicsBeginImageContextWithOptions'. – ipmcc

+0

@ipmcc Да почему-то метод вызывается один раз с нулевым изображением. Это было легко исправить, добавив условие. Это работало на моем первом взгляде, так что это не пришло мне в голову. Спасибо – adam

ответ

8

Попробуйте это: В Xcode добавить символическую точку останова в CGPostError. (Добавить символическую точку останова и в поле типа символа CGPostError)

При возникновении ошибки отладчик прекратит выполнение кода, и вы можете проверить стек вызовов методов и проверить параметры.

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]; 
0

, как я знаю, вы называете UIGraphicsBeginImageContextWithOptions с size.width или size.height 0

просто добавьте символическую точку останова в CGPostError для проверки.

Смежные вопросы