2017-05-23 2 views
0

私は灰色に着色画像を変換するために、私はthis postで見つかったこの機能を使用していますが、1スケーリング:透明なピクセルでイメージをグレースケール化する方法は、すべてが不透明になっていますか?

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

    let width = UInt(self.size.width) 
    let height = UInt(self.size.height) 
    let context = CGBitmapContextCreate(nil, width, height, 8, 0, colorSpace, .allZeros); 
    CGContextDrawImage(context, imageRect, self.CGImage!); 

    let imageRef = CGBitmapContextCreateImage(context); 
    let newImage = UIImage(CGImage: imageRef) 
    return newImage 
} 

私は透明な背景を持っている一部の画像といくつかのテストをした、と私が得る結果はイメージです黒い背景で。私は透明/半透明のピクセルが画像の背景が白であるかのように振る舞うようにしたいのですが、どうすればいいですか?

+0

? – DonMag

答えて

0

イメージの透明部分を白(または他の色)にするには、描画コンテキストに塗りつぶし矩形を描画します。

スウィフト3:

extension UIImage { 
    func grayScaleImage() -> UIImage { 
     //let imageRect = CGRectMake(0, 0, self.size.width, self.size.height); 
     let imageRect = CGRect(origin: CGPoint.zero, size: self.size) 
     let colorSpace = CGColorSpaceCreateDeviceGray(); 

     let width = Int(self.size.width) 
     let height = Int(self.size.height) 

     let context = CGContext(data: nil, width: width, height: height, bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: .allZeros) 

     // set Fill Color to White (or some other color) 
     context?.setFillColor(UIColor.white.cgColor) 
     // Draw a white-filled rectangle before drawing your image 
     context?.fill(imageRect) 

     context?.draw(self.cgImage!, in: imageRect) 

     let imageRef = context?.makeImage() 
     let newImage = UIImage(cgImage: imageRef!) 
     return newImage 
    } 
} 

スウィフト2.2:

スウィフトのバージョンを使用している
extension UIImage { 
    func grayScaleImage() -> UIImage { 
     let imageRect = CGRectMake(0, 0, self.size.width, self.size.height); 
     let colorSpace = CGColorSpaceCreateDeviceGray(); 

     let width = Int(self.size.width) 
     let height = Int(self.size.height) 
     let context = CGBitmapContextCreate(nil, width, height, 8, 0, colorSpace, .allZeros); 

     // set Fill Color to White (or some other color) 
     CGContextSetFillColorWithColor(context, UIColor.whiteColor().CGColor) 
     // Draw a white-filled rectangle before drawing your image 
     CGContextFillRect(context, imageRect) 

     CGContextDrawImage(context, imageRect, self.CGImage!); 

     let imageRef = CGBitmapContextCreateImage(context); 
     let newImage = UIImage(CGImage: imageRef!) 
     return newImage 
    } 
} 
関連する問題