swift - Bitwise operations with CGBitmapInfo and CGImageAlphaInfo -
i'm having trouble performing bitwise operations cgimagealphainfo , cgbitmapinfo in swift.
in particular, don't know how port objective-c code:
bitmapinfo &= ~kcgbitmapalphainfomask; bitmapinfo |= kcgimagealphanoneskipfirst; the following straightforward swift port produces cryptic compiler error 'cgbitmapinfo' not identical 'bool' on last line:
bitmapinfo &= ~cgbitmapinfo.alphainfomask bitmapinfo |= cgimagealphainfo.noneskipfirst looking @ source code noticed cgbitmapinfo declared rawoptionsettype while cgimagealphainfo isn't. maybe has it?
it doesn't official documentation on bitwise operators doesn't cover enums.
you have right equivalent swift code:
bitmapinfo &= ~cgbitmapinfo.alphainfomask bitmapinfo |= cgbitmapinfo(cgimagealphainfo.noneskipfirst.rawvalue) it's little strange because cgimagealphainfo isn't bitmask -- it's uint32 enum (or cf_enum/ns_enum type uint32_t, in c parlance), values 0 through 7.
what's happening first line clears first 5 bits of bitmapinfo, is bitmask (aka rawoptionsettype in swift), since cgbitmapinfo.alphainfomask 31, or 0b11111. second line sticks raw value of cgimagealphainfo enum cleared bits.
i haven't seen enums , bitmasks combined anywhere else, if explains why there isn't documentation. since cgimagealphainfo enum, values mutually exclusive. wouldn't make sense:
bitmapinfo &= ~cgbitmapinfo.alphainfomask bitmapinfo |= cgbitmapinfo(cgimagealphainfo.noneskipfirst.rawvalue) bitmapinfo |= cgbitmapinfo(cgimagealphainfo.premultipliedlast.rawvalue)
Comments
Post a Comment