2017-05-23 2 views
0

ich diese Funktion verwende ich in this post fand ein farbiges Bild auf einem grauen eine skalierte zu konvertieren:Wie skaliert man ein Bild mit transparenten Pixeln, die alle undurchsichtig machen?

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 
} 

ich mit einigen Bildern einige Tests haben die transparenten Hintergrund haben, und das Ergebnis, das ich bekommen ist ein Bild mit schwarzem Hintergrund. Ich möchte, dass sich die transparenten/transluzenten Pixel so verhalten, als ob der Hintergrund des Bildes weiß wäre. Wie könnte ich das tun?

+0

Welche Version von Swift verwenden Sie? – DonMag

Antwort

0

Um den transparenten Teil Ihres Bildes weiß zu machen (oder eine andere Farbe), zeichnen Sie einfach ein gefülltes Rechteck in den Zeichenkontext.

Swift 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 
    } 
} 

Swift 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 
    } 
} 
Verwandte Themen