我尝试使用
在Swift2中旋转CIImagelet rotatedImage = someCIImage.imageByApplyingTransform(CGAffineTransformMakeRotation(CGFloat(M_PI / 2.0))))
当我查看生成的矩形的大小时,它已被旋转。 (它是1000x500,现在是500x1000)。但是,我随后进行的计算(转换为位图并访问各个像素)表示不同。我是对的,上面的变换围绕图像的中心旋转,即在上面的例子中大约500/250?
答案 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])
}