【发布时间】:2017-03-02 12:43:44
【问题描述】:
有没有办法将 UIKit 坐标(左上角 0,0)转换为 Quartz/CoreImage(左下角 0,0)?在这里找不到类似这样的 swift 相关内容。
【问题讨论】:
标签: ios swift coordinates core-image quartz
有没有办法将 UIKit 坐标(左上角 0,0)转换为 Quartz/CoreImage(左下角 0,0)?在这里找不到类似这样的 swift 相关内容。
【问题讨论】:
标签: ios swift coordinates core-image quartz
您可以使用仿射变换矩阵,这个片段取自我的代码,用于从 Core Image / Core graphics 转换为 UIKit:
CGAffineTransform t = CGAffineTransformMakeScale(1, -1);
t = CGAffineTransformTranslate(t,0, -imageView.bounds.size.height);
基本上你需要:
之后,您可以使用这些几何函数来计算您的矩形或点
CGPoint pointUIKit = CGPointApplyAffineTransform(pointCI, t);
CGRect rectUIKit = CGRectApplyAffineTransform(rectCI, t);
在 Swift 3.x 中:
var t = CGAffineTransform(scaleX: 1, y: -1)
t = t.translatedBy(x: 0, y: -imageView.bounds.size.height)
let pointUIKit = pointCI.applying(t)
let rectUIKIT = rectCI.applying(t)
【讨论】:
原点在左下而不是左上,你不需要对X轴做任何事情,但你需要翻转右轴。 UIKit(或者在这种情况下,Core Graphics)使用 CGPoints。 Core Image 通常使用 CIVectors,它可以有 2、3 或 4 个轴角。
这是一个将 CGPoint(X,Y) 转换为 CIVector(X,Y) 的简单函数:
func createVector(_ point:CGPoint, image:CIImage) -> CIVector {
return CIVector(x: point.x, y: image.extent.height - point.y)
}
【讨论】: