I'm rewriting Apple's UIImageEffects
sample code from Objective-C to Swift and I have a question regarding the following line:
vImage_CGImageFormat format = {
.bitsPerComponent = 8,
.bitsPerPixel = 32,
.colorSpace = NULL,
.bitmapInfo = kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little,
.version = 0,
.decode = NULL,
.renderingIntent = kCGRenderingIntentDefault
};
Here is my version in 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)
Is this the simplest way to create bitmapInfo
in Swift?
You can make it a little simpler:
let bimapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.PremultipliedFirst.rawValue)
.union(.ByteOrder32Little)
You unfortunately can't get away from converting the CGImageAlphaInfo
into a CGBitmapInfo
. That's just a weakness in the current API. But once you have it, you can use .union
to combine it with other values. And once the enum type is known, you don't have to keep repeating it.
It's weird to me that there's no operator available here. I've opened a radar for that, and included an |
implementation. 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