gpt4 book ai didi

swift - CGBitmapInfo 和 CGI​​mageAlphaInfo 的位运算

转载 作者:IT王子 更新时间:2023-10-29 05:30:03 24 4
gpt4 key购买 nike

我在使用 Swift 中的 CGImageAlphaInfoCGBitmapInfo 执行按位运算时遇到问题。

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

bitmapInfo &= ~kCGBitmapAlphaInfoMask;
bitmapInfo |= kCGImageAlphaNoneSkipFirst;

以下简单的 Swift 移植会在最后一行产生有点神秘的编译器错误 'CGBitmapInfo' is not identical to 'Bool':

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

查看源代码我注意到 CGBitmapInfo 被声明为 RawOptionSetTypeCGImageAlphaInfo 不是。也许这与它有关?

按位运算符的官方文档没有涵盖枚举,这于事无补。

最佳答案

你有正确的等效 Swift 代码:

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

有点奇怪因为CGImageAlphaInfo实际上不是位掩码——它只是一个 UInt32 enum (或者用 C 语言来说,类型为 uint32_t 的 CF_ENUM/NS_ENUM),值为 0 到 7。

实际发生的是您的第一行清除了 bitmapInfo 的前五位,位掩码(在 Swift 中又名 RawOptionSetType),因为 CGBitmapInfo.AlphaInfoMask是 31,即 0b11111。然后你的第二行坚持 CGImageAlphaInfo 的原始值枚举到那些清除的位中。

如果这能解释为什么没有真正的文档的话,我在其他任何地方都没有看到枚举和位掩码像这样组合。自 CGImageAlphaInfo是一个枚举,它的值是互斥的。这没有任何意义:

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

关于swift - CGBitmapInfo 和 CGI​​mageAlphaInfo 的位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25773391/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com