首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >斯威夫特中的核心图像TileEffect滤波器返回零图像

斯威夫特中的核心图像TileEffect滤波器返回零图像
EN

Stack Overflow用户
提问于 2017-07-10 13:02:12
回答 1查看 732关注 0票数 0

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

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

我找了很多,但没有找到任何解决方案或工作的例子。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-11 12:45:13

谢谢各位。替换一行代码解决了我的问题

代码语言:javascript
复制
let cgimg = context.createCGImage(filter!.outputImage!, from: filter!.outputImage!.extent)

代码语言:javascript
复制
 let cgimg = context.createCGImage(filter!.outputImage!, from: originalImage.extent)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45012806

复制
相关文章

相似问题

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