0
私のXとYのタッチ座標を適切なCIVectorに変換する助けに感謝します。以下のコードは、バンプの歪みのkCIInputCenterKey座標を「タッチ」にするために使用しているすべてのものです。それは幾分か機能しますが、フィルタの中央キーを選択するために画面をタッチするとY座標が反転します。 Xは正確であるが、私は画像の上に触れた場合タッチ位置に基づいてイメージフィルタのkCIInputCenterKeyを作成しようとしていて、y座標が反転しています
var xCord:CGFloat = 0.0
var yCord:CGFloat = 0.0
func didTapImage(gesture: UIGestureRecognizer) {
let point = gesture.location(in: gesture.view)
print(point)
xCord = point.x
yCord = point.y
print ("\(point) and x\(xCord) and \(yCord)")
}
@IBAction func filter(_ sender: Any) {
guard let image = self.imageView.image?.cgImage else { return }
let openGLContext = EAGLContext(api: .openGLES3)
let context = CIContext(eaglContext: openGLContext!)
let ciImage = CIImage(cgImage: image)
let filter = CIFilter(name: "CIBumpDistortion")
filter?.setValue(ciImage, forKey: kCIInputImageKey)
filter?.setValue((CIVector(x: xCord, y: yCord)), forKey: kCIInputCenterKey)
filter?.setValue(300.0, forKey: kCIInputRadiusKey)
filter?.setValue(2.50, forKey: kCIInputScaleKey)
centerScrollViewContents()
if let output = filter?.value(forKey: kCIOutputImageKey) as? CIImage{
self.imageView.image = UIImage(cgImage: context.createCGImage(output, from: output.extent)!)
}
}
問題はyCordが何らかの理由から来て反転される正しいx軸位置を保持しながら、フィルタは、画像の反対側の下部に適用されますベクトルのフロートです。私のようなもの使って、これを修正しようとすると:
filter?.setValue((CIVector(x: xCord, y: -yCord)), forKey: kCIInputCenterKey)
または
filter?.setValue((CIVector(x: xCord, y: yCord * (-1))), forKey: kCIInputCenterKey)
をそれはイメージ図で上下にジャンプしたりするために画像全体を引き起こし、フィルタがそれに適用されません。どこでも。値が単純な数学で反転されることは望ましくないので、ここからどこに行くのかはわかりません。 ご協力いただければ幸いです!