加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:40:46 所属栏目:百科 来源:网络整理
导读:我无法使用 Swift中的CGImageAlphaInfo和CGBitmapInfo进行按位操作. 特别是,我不知道如何移植这个Objective-C代码: bitmapInfo = ~kCGBitmapAlphaInfoMask;bitmapInfo |= kCGImageAlphaNoneSkipFirst; 以下简单的Swift端口产生了一些隐含的编译器错误“CG??
我无法使用 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或0b22222.那么你的第二行将CGImageAlphaInfo枚举的原始值粘贴到那些已清除的位中.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读