2015-10-16 129 views
0

我想將已經具有Alpha通道(RGBA)的png圖像轉換爲黑白圖像。將圖像轉換爲黑白圖像,同時保留Alpha通道

我使用下面的類別是:

func convertToGrayScale() -> UIImage { 
    let imageRect:CGRect = CGRectMake(0, 0, self.size.width, self.size.height) 
    let colorSpace = CGColorSpaceCreateDeviceGray() 
    let width = self.size.width 
    let height = self.size.height 

    let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.None.rawValue) 
    let context = CGBitmapContextCreate(nil, Int(width), Int(height), 8, 0, colorSpace, bitmapInfo.rawValue) 

    CGContextDrawImage(context, imageRect, self.CGImage) 
    let imageRef = CGBitmapContextCreateImage(context) 
    let newImage = UIImage(CGImage: imageRef!) 

    return newImage 
} 

但是,當我改變CGImageAlphaInfoNone其他任何東西,我imageRef返回nil,從而脫穎而出崩潰的應用程序。

有沒有辦法,還是我在嘗試一些不可能的事情?

+1

請嘗試CoreImage篩選 您可以在蘋果的文檔搜索iOS的核心圖像過濾器的參考。 – Alex

回答

9

使用CoreImage filters固定它作爲Yi.​​Zhang建議:)

func convertToGrayScale() -> UIImage { 
    let filter: CIFilter = CIFilter(name: "CIPhotoEffectMono")! 
    filter.setDefaults() 
    filter.setValue(CoreImage.CIImage(image: self)!, forKey: kCIInputImageKey) 

    return UIImage(CGImage: CIContext(options:nil).createCGImage(filter.outputImage!, fromRect: filter.outputImage!.extent)) 
} 

(雨燕2.0)

相關問題