Объединение CGBitmapInfo и CGImageAlphaInfo в Swift
Я переписываю Apple UIImageEffects
Пример кода от 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)
Это самый простой способ создать bitmapInfo
в Свифте?
2 ответа
Вы можете сделать это немного проще:
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
Сейчас это не очень красиво, независимо от того, что вы делаете, но я думаю, что самый чистый стиль (начиная со Swift 4) - это использовать что-то вроде:
let bitmapInfo: CGBitmapInfo = [
.byteOrder32Little,
.floatComponents,
CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue)]
(Или используйте что-то похожее в строке.) Это, по крайней мере, сохраняет основные опции информации.