CGBitMapContextCreate方法导致编译器警告Xcode 5而不是Xcode 4

时间:2013-09-16 14:59:18

标签: ios xcode cgcontext xcode5 cgbitmapcontextcreate

我刚刚将Xcode从版本4.6.2更新到5.0,并且在我的项目中执行了一个方法(在Xcode 4.6.2中创建)后突然发出编译器警告。我尝试在新旧版本的Xcode中重新打开项目,并且我已经确认相同的方法在4.6.2中没有给出警告。

以下是在Xcode 5.0中引出警告的代码行:

CGContextRef context = CGBitmapContextCreate(NULL, frame.size.width * scaleFactor, frame.size.height * scaleFactor, 8, frame.size.width * scaleFactor * 4, colorSpace, kCGImageAlphaPremultipliedFirst);

警告说:

"Implicit conversion from enumeration type 'enum CGImageAlphaInfo' to different enumeration type 'CGBitMapInfo' (aka 'enum CGBitMapInfo')"

它似乎不是弃用警告,但我对这些类不太熟悉,无法解释其含义或知道如何解决它。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:37)

kCGImageAlpha*枚举值应该填充CGBitmapInfo中的前五位。但是,由于C类型系统无法表达这一点,因此您会收到类型不匹配的警告,即使它们是有意的。

正确的解决方案是将您的alpha枚举值转换为CGBitmapInfo,因为它就是这样:

(CGBitmapInfo)kCGImageAlphaPremultipliedFirst

答案 1 :(得分:6)

由aegolden看到评论https://github.com/inkling/Subliminal/issues/23,新XCode警告的意图可能是指示您在这些枚举类型上使用不同的掩码来构造和连接各种标志。因此,不要只使用kCGImageAlphaPremultipliedFirst,而是使用

(kCGBitmapAlphaInfoMask& kCGImageAlphaPremultipliedFirst)

此更改后警告将消失。