swift – 使用CGBitmapInfo和CGImageAlphaInfo进行逐位操作

前端之家收集整理的这篇文章主要介绍了swift – 使用CGBitmapInfo和CGImageAlphaInfo进行逐位操作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我无法使用 Swift中的CGImageAlphaInfo和CGBitmapInfo进行按位操作.

特别是,我不知道如何移植这个Objective-C代码

bitmapInfo &= ~kCGBitmapAlphaInfoMask;
bitmapInfo |= kCGImageAlphaNoneSkipFirst;

以下简单的Swift端口产生了一些隐含的编译器错误“CG​​BitmapInfo”与最后一行的“Bool”不同:

bitmapInfo &= ~CGBitmapInfo.AlphaInfoMask
bitmapInfo |= CGImageAlphaInfo.NoneSkipFirst

看看源代码我注意到CGBitmapInfo被声明为RawOptionSetType,而CGImageAlphaInfo不是.也许这与它有关系?

这并不意味着关于按位运算符的官方文档不包括枚举.

你有正确的等效Swift代码
bitmapInfo &= ~CGBitmapInfo.AlphaInfoMask
bitmapInfo |= CGBitmapInfo(CGImageAlphaInfo.NoneSkipFirst.rawValue)

这有点奇怪,因为CGImageAlphaInfo实际上并不是一个位掩码 – 它只是一个UInt32枚举(或类型为uint32_t的CF_ENUM / NS_ENUM,C语言),值为0到7.

实际发生的是,您的第一行清除bitmapInfo的前5位,这是Bitmask(也称为Swift中的RawOptionSetType),因为CGBitmapInfo.AlphaInfoMask为31或0b11111.那么你的第二行将CGImageAlphaInfo枚举的原始值粘贴到那些已清除的位中.

我没有看到这样的枚举和bitmasks这样的其他地方,如果这解释为什么没有真正的文档.由于CGImageAlphaInfo是一个枚举,它的值是互斥的.这没有任何意义:

bitmapInfo &= ~CGBitmapInfo.AlphaInfoMask
bitmapInfo |= CGBitmapInfo(CGImageAlphaInfo.NoneSkipFirst.rawValue)
bitmapInfo |= CGBitmapInfo(CGImageAlphaInfo.PremultipliedLast.rawValue)

猜你在找的Swift相关文章