使用CGAffineTransformMakeRotation在Swift 2中旋转CIImage

时间:2016-04-18 12:15:37

标签: rotation ciimage

我尝试使用

在Swift2中旋转CIImage
let rotatedImage        = someCIImage.imageByApplyingTransform(CGAffineTransformMakeRotation(CGFloat(M_PI / 2.0))))

当我查看生成的矩形的大小时,它已被旋转。 (它是1000x500,现在是500x1000)。但是,我随后进行的计算(转换为位图并访问各个像素)表示不同。我是对的,上面的变换围绕图像的中心旋转,即在上面的例子中大约500/250?

2 个答案:

答案 0 :(得分:5)

该变换围绕图像的原点旋转。此版本将枢轴点设置为中心:

var tx = CGAffineTransformMakeTranslation(
    image.extent.width / 2,
    image.extent.height / 2)

tx = CGAffineTransformRotate(
    tx,
    CGFloat(M_PI_2))

tx = CGAffineTransformTranslate(
    tx,
    -image.extent.width / 2,
    -image.extent.height / 2)

var transformImage = CIFilter(
    name: "CIAffineTransform",
    withInputParameters: [
        kCIInputImageKey: image,
        kCIInputTransformKey: NSValue(CGAffineTransform: tx)])!.outputImage!

西蒙

答案 1 :(得分:0)

在Swift 5中,代码变得更好。这是一种CIImage扩展方法,可以轻松地围绕中心旋转自己。

func rotate(_ angle: CGFloat) -> CIImage {
    let transform = CGAffineTransform(translationX: extent.midX, y: extent.midY)
        .rotated(by: angle)
        .translatedBy(x: -extent.midX, y: -extent.midY)
    return applyingFilter("CIAffineTransform", parameters: [kCIInputTransformKey: transform])
}