2016-03-02 78 views
2

我已在我的iOS应用程序中实施CIFilter以profileImages。我添加了方向以防止像素化,但我患有纵横比“ScaleAspectFill”未应用于图像。彩色相同的图像具有完美的纵横比...即,当我只是有:CIFilter已更改UIImage长宽比 - SWIFT

self.p1ProfilePic.image = p1Img 
  1. 我指定精确的高度和宽度在故事板的轮廓图像。
  2. 我已经尝试添加编程的.contentMode作为.ScaleAspectFill但没有任何效果。
  3. 我在这里错过了什么?的CGRect?

     let originalImageP1 = CIImage(image: p1Img!) 
         let filter = CIFilter(name: "CIPhotoEffectTonal") 
         filter!.setDefaults() 
         filter!.setValue(originalImageP1, forKey: kCIInputImageKey) 
         let outputImage = filter!.outputImage 
         self.p1ProfilePic.image = UIImage(CIImage: outputImage!, scale: UIScreen.mainScreen().scale, orientation: .Up) 
    

回答

4

创建与您的技术一个CIImage一个UIImage创建不尊重contentMode图像。试试这个:

let ciContext = CIContext() 
let cgImage = ciContext.createCGImage(filter.outputImage!, 
    fromRect: filter.outputImage!.extent) 

self.p1ProfilePic.image = UIImage(CGImage: cgImage) 

干杯!

Simon

+0

好东西,谢谢。快速的问题 - 如果我在我的应用程序中使用多个对黑白图像(如上图)的引用...是否更好地运行过滤器并存储黑白图像? CIFilter是否会损害内存和性能? –

+0

如果它是相同的图像,请将其保存为CIImage。一个CIImage不是一个内存占用位图,它实际上是创建一个图像的指令,直到它被转换为可呈现格式(如UIImage)才会“实现”。 CIFilters也很轻便。我可以虚心地建议我自己的书,“Swift的核心图像”:) https://itunes.apple.com/gb/book/core-image-for-swift/id1073029980?mt=13 –

+0

我想我要去存储两个图像,并允许用户根据需要轻松地在两者之间切换。为了节省每次或者甚至多次加载单元格/视图都需要运行的操作。感谢您的信息,将检查出来! –