swift 中的 Core Image TileEffect 过滤器正在返回 nil 图像

Core Image TileEffect filters in swift are returning nil image

我正在为 CI 过滤器创建演示应用程序并且几乎应用了所有类别的所有过滤器。但是,当我尝试在 CICategoryTileEffect 中添加滤镜时,除了 "CIKaleidoscope" 之外,所有滤镜都返回 nil 图像。所有其他过滤器都崩溃了。显示代码是class的一部分。

enum EN_TileEffect :String
{
        case affineClamp =  "AffineClamp"
        case affineTile =  "AffineTile"
        case eightfoldReflectedTile =  "EightfoldReflectedTile"
        case fourfoldReflectedTile =  "FourfoldReflectedTile"
        case fourfoldRotatedTile =  "FourfoldRotatedTile"
        case fourfoldTranslatedTile =  "FourfoldTranslatedTile"
        case kaleidoscope =  "Kaleidoscope"
        case opTile =  "OpTile"
        case parallelogramTile =  "ParallelogramTile"
        case perspectiveTile =  "PerspectiveTile"
        case sixfoldReflectedTile =  "SixfoldReflectedTile"
        case triangleKaleidoscope =  "TriangleKaleidoscope"
        case triangleTile =  "TriangleTile"
        case twelvefoldReflectedTile =  "TwelvefoldReflectedTile"
}

class TileEffect {

    fileprivate static var filter : CIFilter!
    fileprivate static var context : CIContext = CIContext(options:nil)

    static func applyFilter(filter: EN_TileEffect , image: UIImage) -> UIImage {
        switch filter {
            case .affineClamp: return affineClamp(image: image)
            case .kaleidoscope: return kaleidoscope(image: image)
            default : return image
        }
    }

    //Just working fine and as expected
    fileprivate static func kaleidoscope(image:UIImage) -> UIImage {

        let originalImage = CIImage(cgImage: (image.cgImage)!)
        let orientation = (image.imageOrientation)

        filter = CIFilter(name: "CIKaleidoscope")
        filter?.setValue(originalImage, forKey: kCIInputImageKey)
        filter?.setValue(CIVector(x:120,y:120), forKey: kCIInputCenterKey)
        filter?.setValue(0, forKey: kCIInputAngleKey)
        filter?.setValue(2, forKey: "inputCount")

        let cgimg = context.createCGImage(filter!.outputImage!, from: filter!.outputImage!.extent)
        return UIImage(cgImage: cgimg!, scale: 1.0, orientation: orientation)
    }
   // This method could not generate a new image and crashing every time.
    fileprivate static func affineClamp(image:UIImage) -> UIImage {

        let originalImage = CIImage(cgImage: (image.cgImage)!)
        let orientation = (image.imageOrientation)

        filter = CIFilter(name: "CIAffineClamp")
        filter?.setValue(originalImage, forKey: kCIInputImageKey)

        let transform = CGAffineTransform.identity
        let val = NSValue(cgAffineTransform: transform)
        filter.setValue(val, forKey: "inputTransform")

        **//Always returning nil image here**
        let cgimg = context.createCGImage(filter!.outputImage!, from: filter!.outputImage!.extent)

        return UIImage(cgImage: cgimg!, scale: 1.0, orientation: orientation)
    }
}

我搜索了很多但没有找到任何解决方案或工作示例。

谢谢大家。替换一行代码解决了我的问题 来自

let cgimg = context.createCGImage(filter!.outputImage!, from: filter!.outputImage!.extent)

 let cgimg = context.createCGImage(filter!.outputImage!, from: originalImage.extent)