2015-03-05 5 views
5

Ich verwende die CIPerspectiveCorrection Filter und mein Problem ist, dass meine zurückgegebenen Bilder spiegeln, auf den Kopf gestellt werden, und die Punkte für die Perspektive Korrektur scheinen die falsche Achse oder Achsrichtung beziehen .CIPperspectiveCorrection-Filter gibt das Bild zurück und invertiert

Um das Problem zu isolieren habe ich mit einem Testbild gearbeitet, das 1024 x 1024 ist und ich passiere in einem perfekt rechteckigen Bereich. Ich lande immer noch mit vertikal und horizontal gespiegelten Bildern.

Hier ist meine Funktion, die eine beschnittene CIImage Instanz ein Bild und eine Reihe von Punkten gegeben zurück:

private func _getCroppedImageWithImage(image:CIImage, topLeft:CGPoint, topRight:CGPoint, botLeft:CGPoint, botRight:CGPoint) -> CIImage { 
    var rectCoords = NSMutableDictionary(capacity: 4) 
    rectCoords["inputTopLeft"] = CIVector(CGPoint:topLeft) 
    rectCoords["inputTopRight"] = CIVector(CGPoint:topRight) 
    rectCoords["inputBottomLeft"] = CIVector(CGPoint:botLeft) 
    rectCoords["inputBottomRight"] = CIVector(CGPoint:botRight) 
    return image.imageByApplyingFilter("CIPerspectiveCorrection", withInputParameters: rectCoords) 
} 

Und hier ist, wo ich diese Funktion nenne:

func testCrop() { 

    let ciInputImage = CIImage(image:UIImage(named:"test-pattern.jpg")!) 

    println("source image is \(ciInputImage)") //<CIImage: 0x170212290 extent [0 0 1024 1024]> 

    let ptBotLeft = CGPointMake(32.0,992.0) 
    let ptBotRight = CGPointMake(992.0,992.0) 
    let ptTopRight = CGPointMake(992.0,32.0) 
    let ptTopLeft = CGPointMake(32.0,32.0) 

    let croppedImage = _getCroppedImageWithImage(ciInputImage, topLeft: ptTopLeft, topRight: ptTopRight, botLeft: ptBotLeft, botRight: ptBotRight) 
    println("cropped image \(croppedImage)") //<CIImage: 0x174204a60 extent [0 0 960 960]> 

    let croppedImageCG = CIContext(options: nil).createCGImage(croppedImage, fromRect: croppedImage.extent()) 

    let imageVC = ImageViewController(image: UIImage(CGImage: croppedImageCG)) 
    presentViewController(imageVC, animated: true, completion: nil) 
} 

Hat jemand Probleme So wie vorher?

Hier ist das Quellbild

enter image description here

Und hier ist das letzte in einer UIImageView mit contentMode zeigtes Bild gesetzt

enter image description here

Antwort

7

OK, mein Problem scaleAspectFit, bin ich ziemlich sicher, dass CoreImage das kartesische Koordinatensystem verwendet. Y ist auf. (Null, Null) ist unten links.

+4

func cartesianForPoint (point: CGPoint, Maße: CGRect) -> CGPoint { return CGPoint (x: point.x, y: extent.height - point.y) } – nwales

+0

ich Ihnen genug dafür nicht danken kann letzte Funktion! Ich wusste, was das Problem war, aber nachdem ich viel Zeit mit meinem Projekt verbracht hatte, konnte ich nicht herausfinden, wie ich es umsetzen konnte! – Fengson

+0

@nwales danke! – Zeotyn

Verwandte Themen