ios – swift 2.0后的CGBitmapInfo alpha蒙版
2019年08月04日
作者:佚名
我使用这个
github repo
https://github.com/Haneke/HanekeSwift中的一个库缓存从服务器下载的映像.更新到swift 2.0后,一切都搞砸了.
除了这个功能,我已经能够修复一切:
func hnk_decompressedImage() -> UIImage! { let originalImageRef = self.CGImage let originalBitmapInfo = CGImageGetBitmapInfo(originalImageRef) let alphaInfo = CGImageGetAlphaInfo(originalImageRef) // See: https://stackoverflow.com/questions/23723564/which-cgimagealphainfo-should-we-use var bitmapInfo = originalBitmapInfo switch (alphaInfo) { case .None: bitmapInfo &= ~CGBitmapInfo.AlphaInfoMask bitmapInfo |= CGBitmapInfo(rawValue: CGImageAlphaInfo.NoneSkipFirst.rawValue) case .PremultipliedFirst,.PremultipliedLast,.NoneSkipFirst,.NoneSkipLast: break case .Only,.Last,.First: // Unsupported return self } let colorSpace = CGColorSpaceCreateDeviceRGB() let pixelSize = CGSizeMake(self.size.width * self.scale,self.size.height * self.scale) if let context = CGBitmapContextCreate(nil,Int(ceil(pixelSize.width)),Int(ceil(pixelSize.height)),CGImageGetBitsPerComponent(originalImageRef),colorSpace,bitmapInfo) { let imageRect = CGRectMake(0,pixelSize.width,pixelSize.height) UIGraphicsPushContext(context) // Flip coordinate system. See: https://stackoverflow.com/questions/506622/cgcontextdrawimage-draws-image-upside-down-when-passed-uiimage-cgimage CGContextTranslateCTM(context,pixelSize.height) CGContextScaleCTM(context,1.0,-1.0) // UIImage and drawInRect takes into account image orientation,unlike CGContextDrawImage. self.drawInRect(imageRect) UIGraphicsPopContext() let decompressedImageRef = CGBitmapContextCreateImage(context) let scale = UIScreen.mainScreen().scale let image = UIImage(CGImage: decompressedImageRef,scale:scale,orientation:UIImageOrientation.Up) return image } else { return self } }
具体来说,这是抛出错误的代码行:
bitmapInfo &= ~CGBitmapInfo.AlphaInfoMask bitmapInfo |= CGBitmapInfo(rawValue: CGImageAlphaInfo.NoneSkipFirst.rawValue)
错误:一元运算符’〜’不能应用于CGBitmapInfo类型的操作数
bitmapInfo |= CGBitmapInfo(rawValue: CGImageAlphaInfo.NoneSkipFirst.rawValue)
错误:二进制运算符’| =’不能应用于类型为’CGBitmapInfo’的操作数
if let context = CGBitmapContextCreate(nil,bitmapInfo)
错误:无法将类型“CGBitmapInfo”的值转换为UInt32类型的预期参数
解决方法
错误:无法将类型“CGBitmapInfo”的值转换为UInt32类型的预期参数
Swift 2.0实际上期望一个UInt32而不是一个CGBitMapInfo对象,所以你应该在CGBitMapInfo中取出一个UInt32变量.
CGBitmapContextCreate( nil,bitmapInfo.rawValue)
https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGBitmapContext/#//apple_ref/c/func/CGBitmapContextCreate
以上是来客网为你收集整理的ios – swift 2.0后的CGBitmapInfo alpha蒙版全部内容,希望文章能够帮你解决ios – swift 2.0后的CGBitmapInfo alpha蒙版所遇到的程序开发问题。
如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。