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

jac*_*300 24 xcode cgcontext cgbitmapcontextcreate ios xcode5

我刚刚将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);
Run Code Online (Sandbox Code Playgroud)

警告说:

"Implicit conversion from enumeration type 'enum CGImageAlphaInfo' to different enumeration type 'CGBitMapInfo' (aka 'enum CGBitMapInfo')"
Run Code Online (Sandbox Code Playgroud)

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

nev*_*vyn 37

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

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

(CGBitmapInfo)kCGImageAlphaPremultipliedFirst
Run Code Online (Sandbox Code Playgroud)


Cod*_*rew 6

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

(kCGBitmapAlphaInfoMask&kCGImageAlphaPremultipliedFirst)

此更改后警告将消失.

  • @nevyn:你是对的,包括`kCGBitmapAlphaInfoMask`不会改变参数的值,但是方法要求`CGBitmapInfo`所以我认为使用该枚举类型的值是很好的.诚然,这是一个风格决定,提醒我自己和未来的维护者,我真正*提供的是一个`CGBitmapInfo`,还有其他一些我可以包含的位图信息,即使现在我只关心关于alpha信息.也许这个提醒也适用于那个提醒,但我觉得它比明确使用`CGBitmapInfo`中的值更不具启发性. (3认同)