【发布时间】:2020-05-25 04:45:32
【问题描述】:
我正在尝试在 Swift 中重新编写我的 Android 应用程序以启动 iOS 系统,但我遇到了困难......
Android 应用是关于基于 ColorMatrix 求和的图像处理...即生成灰度图像的下一个矩阵:
float[] bwMatrix = {
0f, 1f, 0f, 0f, 0f,
0f, 1f, 0f, 0f, 0f,
0f, 1f, 0f, 0f, 0f,
0f, 0f, 0f, 1f, 0f,
0f, 0f, 0f, 0f, 1f};
现在,尝试在 Swift 中应用相同的概念,我的代码如下:
import UIKit
dynamic var colorMatrix : CIFilter?
class editionViewController: UIViewController {
@IBOutlet weak var editionImageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
let fileManager = FileManager.default
let imagePath = (self.getDirectoryPath() as NSURL).appendingPathComponent("editionImg0.png")
let urlString: String = imagePath!.absoluteString
if fileManager.fileExists(atPath: urlString) {
let originalImage = UIImage (contentsOfFile: urlString)
let liaImage = originalImage?.liaFilter()
editionImageView.image = liaImage
}
}
func getDirectoryPath() -> NSURL {
let path = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent("tempImages")
let url = NSURL (string: path)
return url!
}
}
extension UIImage {
//Lia filter
func liaFilter() -> UIImage? {
let inImage = CIImage(image: self)
colorMatrix?.setDefaults()
colorMatrix?.setValue(inImage, forKey: "inputImage")
colorMatrix?.setValue(CIVector(x: 0, y: 1, z: 0, w: 0), forKey: "inputRvector")
colorMatrix?.setValue(CIVector(x: 0, y: 1, z: 0, w: 0), forKey: "inputGvector")
colorMatrix?.setValue(CIVector(x: 0, y: 1, z: 0, w: 0), forKey: "inputBvector")
colorMatrix?.setValue(CIVector(x: 0, y: 0, z: 0, w: 1), forKey: "inputAvector")
let outCIImage = (colorMatrix?.outputImage)
return UIImage (ciImage: outCIImage!) //HERE is the crash
/*
if let outCIImage = colorMatrix?.outputImage {
return UIImage (ciImage: outCIImage)
}
return nil
*/
}
}
但应用程序总是在出现下一个错误时崩溃:
提前谢谢你!
【问题讨论】:
-
您是否检查过
colorMatrix不是nil? -
是的,它是 nil,但我不知道为什么......我看不出哪里失败了。
标签: ios swift xcode cifilter colormatrix