2015-03-05 9 views
5

Używam CIPerspectiveCorrection Filter, a moim problemem jest to, że moje obrazy są zwrócone do tyłu, do góry nogami, a punkty użyte do korekty perspektywy wydają się być odniesieniem do niewłaściwej osi lub kierunku osi .CIPerspectiveCorrection filter zwraca obraz odwrócony i odwrócony

W celu wyizolowania problemu pracowałem z obrazem testowym o rozdzielczości 1024 x 1024 i przechodzę w idealnie prostokątny obszar. Nadal widzę obrazy odwrócone pionowo i poziomo.

Oto moja funkcja, która zwraca przyciętej instancji CIImage dany obraz i zbiór punktów:

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) 
} 

A tu, gdzie jestem wywołanie tej funkcji:

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) 
} 

Czy ktoś napotkał problemy tak jak wcześniej?

Oto obraz źródłowy

enter image description here

A oto ostateczny obraz wyświetlany w UIImageView z contentMode ustawiony scaleAspectFit

enter image description here

Odpowiedz

7

OK, mój problem, jestem ładna z pewnością jest to, że CoreImage używa kartezjańskiego układu współrzędnych. Y jest w górze. (zero, zero) znajduje się w lewym dolnym rogu.

+4

func cartesianForPoint (point: CGPoint, zakres: CGRect) -> CGPoint { powrót CGPoint (x: point.x, y: extent.height - point.y) } – nwales

+0

Nie mogę ci dziękować za to ostatnia funkcja! Wiedziałem, o co chodzi, ale spędzając dużo czasu nad moim projektem, nie mogłem wymyślić, jak go przekonwertować! – Fengson

+0

@nwales dziękuję! – Zeotyn

Powiązane problemy