2017-04-15 1 views
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) 

をそれはイメージ図で上下にジャンプしたりするために画像全体を引き起こし、フィルタがそれに適用されません。どこでも。値が単純な数学で反転されることは望ましくないので、ここからどこに行くのかはわかりません。 ご協力いただければ幸いです!

答えて

0

解決策が見つかりました。

filter?.setValue((CIVector(x: xCord, y: CGFloat(image.height) - yCord)), forKey: kCIInputCenterKey) 
:正しく私がしなければならなかったすべてだったのyを反転する

関連する問題