2016-03-21 21 views
1

これはイメージをグレースケールに変換するために使用しているコードです。イメージをグレースケールに変換します。アルファ

func convertToGrayScale(image: UIImage) -> UIImage 
{ 
    let imageRect:CGRect = CGRectMake(0, 0, image.size.width, image.size.height) 
    let colorSpace = CGColorSpaceCreateDeviceGray() 
    let width = image.size.width 
    let height = image.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, image.CGImage) 
    let imageRef = CGBitmapContextCreateImage(context) 
    let newImage = UIImage(CGImage: imageRef!) 
    return newImage 
} 

これが結果です:enter image description hereenter image description here

私は黒の背景を見たいと思っていません。どうすれば修正できますか?

編集:私はこのコードでそれをやろうとしましたが、動作しますが、画像が読み込まれるまでに3秒かかります。

func convertToGrayScale(image: UIImage) -> UIImage { 

    let cgImage = image.CGImage! 

    let beginImage = CIImage(CGImage: cgImage) 
    let filter = CIFilter(name: "CIColorControls")! 
    filter.setValue(beginImage, forKey: kCIInputImageKey) 
    filter.setValue(0, forKey: kCIInputSaturationKey) 
    return UIImage(CIImage: filter.outputImage!) 
} 

答えて

1

この機能は私の問題を解決しました。それは必ずしもイメージをグレースケールに変えるわけではありませんが、知られていないレシピでは黒にすることができました。濃い灰色の半分は知られていて&と知られています。

func createTintedImageFromImage(originalImage: UIImage, desiredColor: UIColor) -> UIImage { 
    let imageSize: CGSize = originalImage.size 
    let imageScale: CGFloat = originalImage.scale 
    let contextBounds: CGRect = CGRectMake(0, 0, imageSize.width, imageSize.height) 

    UIGraphicsBeginImageContextWithOptions(imageSize, false, imageScale) 
    UIColor.blackColor().setFill() 
    UIRectFill(contextBounds) 
    originalImage.drawAtPoint(CGPointZero) 
    let imageOverBlack: UIImage = UIGraphicsGetImageFromCurrentImageContext() 
    desiredColor.setFill() 
    UIRectFill(contextBounds) 

    imageOverBlack.drawAtPoint(CGPointZero, blendMode: .Multiply, alpha: 1) 
    originalImage.drawAtPoint(CGPointZero, blendMode: .DestinationIn, alpha: 1) 

    let finalImage: UIImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    return finalImage 
} 

enter image description here

関連する問題