繁体   English   中英

如何用透明像素对图像进行灰度处理,使所有像素都不透明?

[英]How to gray scale an image with transparent pixels making all of them opaque?

我正在使用在这篇文章中找到的此功能将彩色图像转换为灰度图像:

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
}

我对某些具有透明背景的图像进行了测试,得到的结果是具有黑色背景的图像。 我希望透明/半透明像素的行为就像图像的背景是白色的,我该怎么做?

要将图像的透明部分变为白色(或其他任何颜色),只需在绘图上下文中绘制一个填充的矩形即可。

斯威夫特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
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM