clampedToExtent() not work when rotation angle

Viewed 32

I wanted to achieve a CIAffineClamp effect where the image could be rotated, scale, and translation and still fill the area. But after trying, I still have some problems.

Show the code in question:

    func translateAndClamp(image: UIImage) -> UIImage {
        guard let ciImage = CIImage(image: image) else {
            return image
        }
        var transform = CGAffineTransform.identity
        transform = transform.concatenating(CGAffineTransform(translationX: -(ciImage.extent.origin.x + ciImage.extent.width/2), y: -(ciImage.extent.origin.y + ciImage.extent.height/2)))

        transform = transform.concatenating(CGAffineTransform(translationX: 100, y: 0))
        transform = transform.concatenating(CGAffineTransform(scaleX: 0.6, y: 0.6))

        // if you open this code, everything effect was gone. Whether the rotation angle will affect the effect? 
       // transform = transform.concatenating(CGAffineTransform(rotationAngle: 0.2))

        transform = transform.concatenating(CGAffineTransform(translationX: (ciImage.extent.origin.x + ciImage.extent.width/2), y: (ciImage.extent.origin.y + ciImage.extent.height/2)))

        let outputImage = ciImage.transformed(by: transform).clampedToExtent()
        let context = CIContext(options: [CIContextOption.useSoftwareRenderer: true])
        let extent = ciImage.extent
        guard let result = context.createCGImage(outputImage, from: extent) else {
            return image
        }

        return UIImage(cgImage: result, scale: image.scale, orientation: image.imageOrientation)
    }

0 Answers
Related