2015-02-11 74 views
0

所以我有下面的代碼,並在行是const double colorMasking [6]現在它是一個雙重,但如果我清理並建立它說不兼容指針類型傳遞雙應該是浮動。然後,但是如果我改變它浮動的錯誤消失,但一旦我清理並再次構建它說不兼容的指針類型傳遞float應該是雙倍。與我剛剛做的完全相反。任何想法發生了什麼?不管類型傳遞的指針類型不相容?

-(UIImage *)changeWhiteColorTransparent: (UIImage *)image 
{ 
    CGImageRef rawImageRef=image.CGImage; 

    const double colorMasking[6] = {222, 255, 222, 255, 222, 255}; 

    UIGraphicsBeginImageContext(image.size); 
    CGImageRef maskedImageRef=CGImageCreateWithMaskingColors(rawImageRef, colorMasking); 
    { 
     //if in iphone 
     CGContextTranslateCTM(UIGraphicsGetCurrentContext(), 0.0, image.size.height); 
     CGContextScaleCTM(UIGraphicsGetCurrentContext(), 1.0, -1.0); 
    } 

    CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, image.size.width, image.size.height), maskedImageRef); 
    UIImage *result = UIGraphicsGetImageFromCurrentImageContext(); 
    CGImageRelease(maskedImageRef); 
    UIGraphicsEndImageContext(); 
    return result; 
} 
+1

愚蠢的問題:用該錯誤消息標記哪條線。 – 2015-02-11 02:02:01

+0

如果'colorMasking'是'CGFloat'而不是'double',它會工作嗎? – NobodyNada 2015-02-11 02:02:13

+0

@HotLicks我認爲它是'CGImageRef maskedImageRef = CGImageCreateWithMaskingColors(rawImageRef,colorMasking);',因爲那是他唯一通過'colorMasking'的時間。 – NobodyNada 2015-02-11 02:02:48

回答

2

變化

const double colorMasking[6] = {222, 255, 222, 255, 222, 255}; 

const CGFloat colorMasking[6] = {222, 255, 222, 255, 222, 255}; 

CGImageCreateWithMaskingColors期望一個CGFloat,這是typedef編到float在32位系統,以及double 64位。當使用float編譯:

  1. 編譯器編譯32位二進制,看到你的float陣列,這是函數需要什麼。
  2. 編譯器編譯64位二進制文​​件並看到您的float數組,但該函數需要一個double數組。

當您使用double而不是float時會發生相反情況。

這裏是CGFloat的的(/ CoreGraphics在CGBase.h)的定義:

#if defined(__LP64__) && __LP64__ 
# define CGFLOAT_TYPE double 
# define CGFLOAT_IS_DOUBLE 1 
# define CGFLOAT_MIN DBL_MIN 
# define CGFLOAT_MAX DBL_MAX 
#else 
# define CGFLOAT_TYPE float 
# define CGFLOAT_IS_DOUBLE 0 
# define CGFLOAT_MIN FLT_MIN 
# define CGFLOAT_MAX FLT_MAX 
#endif 

typedef CGFLOAT_TYPE CGFloat; 
1

該文檔提供:CGImageRef CGImageCreateWithMaskingColors (CGImageRef image, const CGFloat components[]);所以colorMasking應該CGFloat類型。

相關問題