2017-03-02 8 views

Antwort

2

Sie affine Transformationsmatrix verwenden, dies snipped von einem Code von mir gemacht wird Core Image/Core-Grafiken zu UIKit konvertieren von:

CGAffineTransform t = CGAffineTransformMakeScale(1, -1); 
t = CGAffineTransformTranslate(t,0, -imageView.bounds.size.height); 

Grundsätzlich müssen Sie:

  • Annulliere die y-Achse
  • übersetzen Ursprung der Ansicht Höhe

Nach dem Sie diese geometrischen Funktionen verwenden können, um rect oder Punkte

CGPoint pointUIKit = CGPointApplyAffineTransform(pointCI, t); 
CGRect rectUIKit = CGRectApplyAffineTransform(rectCI, t); 

In Swift 3.x zu berechnen:

var t = CGAffineTransform(scaleX: 1, y: -1) 
t = t.translatedBy(CGAffineTransform(translationX: 0, y: -imageView.bounds.size.hieght) 
let pointUIKit = CGPointApplyAffineTransform(pointCI, t) 
let rectUIKIT = CGRectApplyAffineTransform(rectCI, t) 
1

mit dem Ursprung in dem Boden links gegen die oben links, müssen Sie nichts mit der X-Achse tun, aber Sie müssen die richtige Achse kippen. UIKit (oder in diesem Fall Core Graphics) verwendet CGPoints. Core Image verwendet normalerweise CIVectors, die 2, 3 oder 4 Achsenwinkel haben können.

Hier ist eine einfache Funktion, die eine CGPoint (X, Y) in eine civector (X, Y) drehen wird:

func createVector(_ point:CGPoint, image:CIImage) -> CIVector { 
    return CIVector(x: point.x, y: image.extent.height - point.y) 
} 
+0

Ja, wie dfd sagt. Der einzige Unterschied zwischen den Koordinatenwerten ist die Höhe der Ansicht in der y-Achse. – Magnas