2015-03-05 20 views
5

Tôi đang sử dụng CIPerspectiveCorrection Filter và vấn đề của tôi là kết quả hình ảnh được trả về của tôi được nhân đôi, lộn ngược và các điểm được sử dụng để hiệu chỉnh phối cảnh dường như tham chiếu trục sai hoặc hướng trục .CIPerspectiveBộ lọc chỉnh sửa trả về hình ảnh bị lật và đảo ngược

Để tách biệt vấn đề tôi đã làm việc với hình ảnh thử nghiệm là 1024 x 1024 và tôi đang đi qua một khu vực hình chữ nhật hoàn hảo. Tôi vẫn kết thúc với hình ảnh lộn theo chiều dọc và chiều ngang.

Đây là chức năng của tôi mà trả về một trường hợp CIImage cắt cho một hình ảnh và tập hợp các điểm:

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

Và đây là nơi mà tôi gọi chức năng này:

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

Có ai gặp phải vấn đề như thế này trước đây?

Dưới đây là hình ảnh nguồn

enter image description here

Và đây là hình ảnh cuối cùng được hiển thị trong một UIImageView với contentMode thiết lập để scaleAspectFit

enter image description here

Trả lời

7

OK, vấn đề của tôi, tôi khá chắc chắn, đó là CoreImage sử dụng hệ tọa độ Descartes. Y lên rồi. (không, không) nằm ở dưới cùng bên trái.

+4

func cartesianForPoint (điểm: CGPoint, mức độ: CGRect) -> CGPoint { trả lại CGPoint (x: point.x, y: extent.height - point.y) } – nwales

+0

Tôi không thể cảm ơn đủ cho điều đó chức năng cuối cùng! Tôi biết vấn đề là gì nhưng đã dành rất nhiều thời gian cho dự án của tôi, tôi không thể tìm ra cách chuyển đổi nó! – Fengson

+0

@nwales cảm ơn bạn! – Zeotyn

Các vấn đề liên quan