2013-08-07 61 views
8

我有這樣一段代碼給我的圖像的色彩,我需要:CGContextFillRects:無效的情況下 - 目標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:invalid context 0x0。這是一個嚴重的錯誤。此應用程序或其使用的庫正在使用無效的上下文,從而導致系統穩定性和可靠性的整體降級。這個通知是禮貌的:請解決這個問題。這將成爲即將到來的更新中的致命錯誤。

CGContextFillRects:無效的上下文0x0。這是一個嚴重的錯誤。這個 應用程序或其使用的庫正在使用無效的上下文,因此有助於整體降低系統穩定性和可靠性。這個通知是禮貌的:請解決這個問題。它 將成爲即將到來的更新中的致命錯誤。

任何想法如何擺脫這個錯誤?

謝謝。

編輯:

該行動被調用與零圖像。我很容易通過添加條件來修復它。感謝@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

第三個相同的問題在兩天內,第二個今天。 – 2013-08-07 16:17:30

+1

是你的圖像'無'? IIRC,如果您將高度,寬度或比例的0傳遞給'UIGraphicsBeginImageContextWithOptions',上下文將爲'nil'。 – 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

,因爲我知道,你叫一個size.width或size.height UIGraphicsBeginImageContextWithOptions 0

剛將符號斷點添加到CGPostError中進行檢查。

相關問題