ios – 在Swift中组合CGBitmapInfo和CGImageAlphaInfo

前端之家收集整理的这篇文章主要介绍了ios – 在Swift中组合CGBitmapInfo和CGImageAlphaInfo前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在将Apple的UI ImageEffects示例代码从Objective-C重写为 Swift,我对以下行有一个疑问:
vImage_CGImageFormat format = {
    .bitsPerComponent = 8,.bitsPerPixel = 32,.colorSpace = NULL,.bitmapInfo = kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little,.version = 0,.decode = NULL,.renderingIntent = kCGRenderingIntentDefault
};

这是我在Swift中的版本:

let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.PremultipliedFirst.rawValue | CGBitmapInfo.ByteOrder32Little.rawValue)
let format = vImage_CGImageFormat(bitsPerComponent: 8,bitsPerPixel: 32,colorSpace: nil,bitmapInfo: bitmapInfo,version: 0,decode: nil,renderingIntent: .RenderingIntentDefault)

这是在Swift中创建bitmapInfo的最简单方法吗?

解决方法

你可以让它变得更简单:
let bimapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.PremultipliedFirst.rawValue)
    .union(.ByteOrder32Little)

遗憾的是,您无法将CGImageAlphaInfo转换为CGBitmapInfo.这只是当前API的一个弱点.但是一旦你拥有它,你可以使用.union将它与其他值结合起来.一旦枚举类型已知,您就不必继续重复它.

我觉得这里没有运算符,这很奇怪.我为此开了一个雷达,包括一个|实现. http://www.openradar.me/23516367

public func |<T: SetAlgebraType>(lhs: T,rhs: T) -> T {
    return lhs.union(rhs)
}

@warn_unused_result
public func |=<T : SetAlgebraType>(inout lhs: T,rhs: T) {
    lhs.unionInPlace(rhs)
}

let bimapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.PremultipliedFirst.rawValue)
    | .ByteOrder32Little

猜你在找的iOS相关文章