作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 CILanczosScaleTransform
Core Image Filter 来调整图像大小,但我遇到了问题。这是我的代码:
var imageView: UIImageView = UIImageView()
var image: UIImage?
imageView.frame = CGFrameMake(10,10,200,300)
dispatch_async(dispatch_get_main_queue(), {
let nsurl = NSURL(string:"http://...")
var err: NSError?
var getImageData = NSData(contentsOfURL: nsurl!, options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)
if let imageData = getImageData {
if let receivedImage = UIImage(data: imageData){
image = receivedImage
/*
so far all this code works fine, if I set imageView.image = image
the image displays with no problems...
...the problems are in this bit of code:
*/
let context = CIContext(options:nil)
var ciimg = CIImage(image: image)
var filter = CIFilter(name: "CILanczosScaleTransform")
filter.setValue(image, forKey: kCIInputImageKey)
filter.setValue(0.667, forKey: kCIInputScaleKey)
let result: CIImage = filter.outputImage
let extent = result.extent() // <-- specifically this line
let newImage: UIImage? = UIImage(CIImage: result)
imageView.image = newImage
}
}
})
当执行到 let extent = result.extent()
行时,我得到以下运行时错误:
-[UIImage extent]: unrecognized selector sent to instance 0x7a457790
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImage extent]: unrecognized selector sent to instance 0x7a457790'
我翻译了我在 Apple's Core Image Programming Guide 上找到的代码从 Objective C 到 Swift,感觉我可能翻译错了。
谁能纠正我的错误?
最佳答案
好吧,这是我的错误。这一行:filter.setValue(image, forKey: kCIInputImageKey)
正在使用 image
中的 UIImage
并在过滤器中使用它,而不是它应该使用 ciimg
中的 CIImage
。
所以完整的代码应该是:
var imageView: UIImageView = UIImageView()
var image: UIImage?
imageView.frame = CGFrameMake(10,10,200,300)
dispatch_async(dispatch_get_main_queue(), {
let nsurl = NSURL(string:"http://...")
var err: NSError?
var getImageData = NSData(contentsOfURL: nsurl!, options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)
if let imageData = getImageData {
if let receivedImage = UIImage(data: imageData){
image = receivedImage
let context = CIContext(options:nil)
var ciimg = CIImage(image: image)
var filter = CIFilter(name: "CILanczosScaleTransform")
filter.setValue(ciimg, forKey: kCIInputImageKey)
filter.setValue(0.667, forKey: kCIInputScaleKey)
let result: CIImage = filter.outputImage
let extent = result.extent()
let newImage: UIImage? = UIImage(CIImage: result)
imageView.image = newImage
}
}
})
关于ios - 使用 CILanczosScaleTransform Core Image Filter 调整图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29008557/
我正在尝试使用 Core Image 和 Lanczos Scale Transform 过滤器进行图像缩放。当我进行放大时,这很好。但在缩小并保存为 JPEG 时,我发现一类图像会产生奇怪的噪声伪影
我正在尝试使用 CILanczosScaleTransform Core Image Filter 来调整图像大小,但我遇到了问题。这是我的代码: var imageView: UIImageView
我是一名优秀的程序员,十分优秀!