0

I am trying to convert an UIImage Effect category from Objective-C to Swift language.

When I try to do something likes:

let inputImageBitmapInfo = CGImageGetBitmapInfo(inputCGImage)
let inputImageAlphaInfo = inputImageBitmapInfo & CGBitmapInfo.AlphaInfoMask

Error shows:

Binary operator '&' cannot be applied to two CGBitmapInfo operands

The Objective-C version can be applied with bitmask, but Swift cannot.

Objective-C:

typedef CF_OPTIONS(uint32_t, CGBitmapInfo) {
    kCGBitmapAlphaInfoMask = 0x1F,

    kCGBitmapFloatInfoMask = 0xF00,
    kCGBitmapFloatComponents = (1 << 8),

    kCGBitmapByteOrderMask = 0x7000,
    kCGBitmapByteOrderDefault = (0 << 12),
    kCGBitmapByteOrder16Little = (1 << 12),
    kCGBitmapByteOrder32Little = (2 << 12),
    kCGBitmapByteOrder16Big = (3 << 12),
    kCGBitmapByteOrder32Big = (4 << 12)
} CF_ENUM_AVAILABLE(10_4, 2_0);

Swift:

public struct CGBitmapInfo : OptionSetType {
    public init(rawValue: UInt32)

    public static var AlphaInfoMask: CGBitmapInfo { get }

    public static var FloatInfoMask: CGBitmapInfo { get }
    public static var FloatComponents: CGBitmapInfo { get }

    public static var ByteOrderMask: CGBitmapInfo { get }
    public static var ByteOrderDefault: CGBitmapInfo { get }
    public static var ByteOrder16Little: CGBitmapInfo { get }
    public static var ByteOrder32Little: CGBitmapInfo { get }
    public static var ByteOrder16Big: CGBitmapInfo { get }
    public static var ByteOrder32Big: CGBitmapInfo { get }
}
Zigii Wong
  • 7,766
  • 8
  • 51
  • 79
  • check this http://stackoverflow.com/questions/32639743/cgbitmapinfo-alpha-mask-after-swift-2-0 – Bhavin Bhadani Apr 05 '16 at 05:17
  • `CGBitmapInfo` conforms to `OptionSetType`. In Swift, we don't do binary operation here. Instead, we use arrays. You can combine CGBitmapInfo like this `[CGBitmapInfo.AlphaInfoMask, CGBitmapInfo.FloatComponents]`. – J.Wang Apr 05 '16 at 05:21

0 Answers0