Ben*_*ock 1 xcode enums warnings objective-c
我有一段代码,使用图像的alpha通道创建一个蒙版.在升级到Mavericks之前,它运行良好,我从未在Xcode调试控制台中收到任何警告或错误.自升级以来,我收到此警告:
从枚举类型'enum CGImageAlphaInfo'到不同的枚举类型'CGBitmapInfo'(又名'enum CGBitmapInfo')的隐式转换
标记为问题的行:
CGBitmapContextCreate(alphaData, width, height, 8, rowBytes, NULL, kCGImageAlphaOnly);
Run Code Online (Sandbox Code Playgroud)
这是文档为最后一个参数(aka kCGImageAlphaOnly
)所说的内容:
bitmapInfo
指定位图是否应包含Alpha通道,Alpha通道在像素中的相对位置以及有关像素组件是浮点值还是整数值的信息的常量.用于指定alpha通道信息的常量是使用
CGImageAlphaInfo
类型声明的,但可以安全地传递给此参数.您还可以传递与该CGBitmapInfo
类型关联的其他常量.
奇怪的是,在文档(图像的Alpha信息)中,Apple的typedef没有列出我正在使用的选项.但是,在随后的术语列表中,确实如此!这就是它所说的:
kCGImageAlphaOnly
没有颜色数据,只有alpha通道.适用于OS X v10.3及更高版本.宣布于CGImage.h
.
考虑到我想创建一个alpha蒙版,我对任何颜色数据都不感兴趣,所以我使用的参数是唯一有意义的.我不确定它要我做什么.无论如何,该方法有效,并且当应用程序运行时一切都很好.话虽如此,警告真的很烦人.是否有一个特殊的CLANG指令让它沉默?任何帮助,将不胜感激.干杯.
问题是你正在使编译器进行隐式转换.修复方法是通过强制转换使转换显式:
CGBitmapContextCreate(alphaData, width, height, 8, rowBytes, NULL, (CGBitmapInfo)kCGImageAlphaOnly);
仅仅因为实现了一个函数来允许给定参数的多个类型的值(如文档中所述)并不意味着可以定义它以使编译器不会抱怨它.C不允许您将参数定义为采用多种类型,您必须选择一种.在这种情况下,CGBitmapContextCreate
定义为:
CGContextRef CGBitmapContextCreate (
void *data,
size_t width,
size_t height,
size_t bitsPerComponent,
size_t bytesPerRow,
CGColorSpaceRef colorspace,
CGBitmapInfo bitmapInfo
);
Run Code Online (Sandbox Code Playgroud)
请注意CGBitmapInfo
底部的类型.这意味着,即使CGImageAlphaInfo
值在技术上是合法的,它们仍然需要通过类型检查器进行转换.