2015-03-05 8 views
5

मैं CIPerspectiveCorrection Filter का उपयोग कर रहा हूं और मेरी समस्या यह है कि मेरे लौटाए गए छवि परिणाम प्रतिबिंबित होते हैं, उल्टा नीचे, और परिप्रेक्ष्य सुधार के लिए उपयोग किए गए बिंदु गलत धुरी, या धुरी दिशा का संदर्भ लेते हैं ।CIPerspectiveCorrection फ़िल्टर रिटर्न छवि लौटा और उलटा

इस मुद्दे को अलग करने के लिए मैं एक परीक्षण छवि के साथ काम कर रहा हूं जो 1024 x 1024 है और मैं पूरी तरह से आयताकार क्षेत्र में गुजर रहा हूं। मैं अभी भी लंबवत और क्षैतिज flipped छवियों के साथ समाप्त हो रहा हूँ। यहाँ

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

और जहां मैं इस कार्यप्रणाली को कॉल कर रहा हूं:

यहाँ मेरी समारोह है कि एक छवि को देखते हुए और अंक का सेट एक फसली CIImage उदाहरण देता है

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

किसी को भी समस्याओं का सामना करना पड़ा है इससे पहले की तरह?

यहाँ

enter image description here

स्रोत छवि है और यहाँ scaleAspectFit को

enter image description here

उत्तर

7

ठीक सेट contentMode साथ एक UIImageView में दिखाया गया अंतिम छवि है, मेरी समस्या, मैं बहुत हूँ निश्चित रूप से, यह है कि CoreImage कार्टेशियन समन्वय प्रणाली का उपयोग करता है। वाई ऊपर है (शून्य, शून्य) नीचे बाईं ओर है।

+4

समारोह cartesianForPoint (बिंदु: CGPoint, हद: CGRect) -> CGPoint { वापसी CGPoint (एक्स: point.x, वाई: extent.height - point.y) } – nwales

+0

मैं आपके पास पर्याप्त है कि के लिए धन्यवाद नहीं कर सकते अंतिम समारोह! मुझे पता था कि समस्या क्या थी लेकिन मेरे प्रोजेक्ट पर बहुत समय बिताया, मैं समझ नहीं पाया कि इसे कैसे परिवर्तित किया जाए! – Fengson

+0

@nwales धन्यवाद! – Zeotyn

संबंधित मुद्दे