使用 CGColorSpaceCreateDeviceGray() 将彩色 UIImage 转换为灰度

mum*_*umu 2 image grayscale ios swift

我正在尝试将 UIImage 转换为灰度。它所产生的只是一个完全黑色的图像。

func convertToGrayScale2(image: UIImage) -> UIImage {
    let imageRect:CGRect = CGRect(x:0, y:0, width:image.size.width, height: 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 = CGContext(data: nil, width: Int(width), height: Int(height), bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: bitmapInfo.rawValue)
    let imageRef = context!.makeImage()
    context?.draw(imageRef!, in: imageRect)
    let newImage = UIImage(cgImage: imageRef!)

    return newImage
}
Run Code Online (Sandbox Code Playgroud)

代码有什么问题吗?我需要现有代码的帮助。它之前正在工作。突然它不工作了。

mum*_*umu 5

func convertToGrayScale(image: UIImage) -> UIImage {
        let imageRect:CGRect = CGRect(x:0, y:0, width:image.size.width, height: 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 = CGContext(data: nil, width: Int(width), height: Int(height), bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: bitmapInfo.rawValue)
        //have to draw before create image

        context?.draw(image.cgImage!, in: imageRect)
        let imageRef = context!.makeImage()
        let newImage = UIImage(cgImage: imageRef!)

        return newImage
    }
Run Code Online (Sandbox Code Playgroud)