首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用UIImage ()将着色的CGColorSpaceCreateDeviceGray转换为灰度

使用UIImage ()将着色的CGColorSpaceCreateDeviceGray转换为灰度
EN

Stack Overflow用户
提问于 2017-03-27 07:29:44
回答 3查看 3.5K关注 0票数 2

我正在尝试将UIImage转换为GrayScale。它所造成的只是一个完全黑色的形象。

代码语言:javascript
运行
复制
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
}

密码有什么问题吗?我需要现有代码的帮助。它以前起作用了。突然不起作用了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-27 10:04:34

代码语言:javascript
运行
复制
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
    }
票数 5
EN

Stack Overflow用户

发布于 2017-03-27 08:31:06

您可以使用此函数来代替:

代码语言:javascript
运行
复制
func convertImageToDifferentColorScale(with originalImage:UIImage, imageStyle:String) -> UIImage {
    let currentFilter = CIFilter(name: imageStyle)
    currentFilter!.setValue(CIImage(image: originalImage), forKey: kCIInputImageKey)
    let output = currentFilter!.outputImage
    let context = CIContext(options: nil)
    let cgimg = context.createCGImage(output!,from: output!.extent)
    let processedImage = UIImage(cgImage: cgimg!)
    return processedImage
}

下面是您如何使用的示例:

代码语言:javascript
运行
复制
 let newImage = convertImageToDifferentColorScale(with: UIImage(named: "0318_1")!, imageStyle: "CIPhotoEffectNoir")
 testingImageView.image = newImage

在imageStyle部分中,有几种不同的样式,如下所示:

CIColorCrossPolynomial CIColorCube CIColorCubeWithColorSpace CIColorInvert CIColorMap CIColorMonochrome CIColorPosterize CIFalseColor CIMaskToAlpha CIMaximumComponent CIMinimumComponent CIPhotoEffectChrome CIPhotoEffectFade CIPhotoEffectInstant CIPhotoEffectMono CIPhotoEffectNoir

'CIPhotoEffectNoir'是一个可以给你gray scale的选择。

票数 2
EN

Stack Overflow用户

发布于 2017-03-27 07:38:46

另一种可能的选择可能是使用CoreImage过滤器。请参阅以下SO Post及其Accepted Answer。希望能帮上忙。编码愉快!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43040333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档