3

有没有办法将 UIKit 坐标(左上角 0,0)转换为 Quartz/CoreImage(左下角 0,0)?在这里找不到任何与此相关的快速相关内容。

4

2 回答 2

5

您可以使用仿射变换矩阵,这个片段取自我的代码,用于从 Core Image / Core graphics 转换为 UIKit:

CGAffineTransform t = CGAffineTransformMakeScale(1, -1);
t = CGAffineTransformTranslate(t,0, -imageView.bounds.size.height);

基本上你需要:

  • 否定y轴
  • 按视图高度平移原点

之后,您可以使用这些几何函数来计算您的矩形或点

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)
于 2017-03-02T15:09:36.200 回答
2

原点在左下角而不是左上角,你不需要对 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)
}
于 2017-03-02T13:47:39.477 回答