【问题标题】:Convert UIKit coordinates to Quartz/CoreImage (Swift)将 UIKit 坐标转换为 Quartz/CoreImage (Swift)
【发布时间】:2017-03-02 12:43:44
【问题描述】:

有没有办法将 UIKit 坐标(左上角 0,0)转换为 Quartz/CoreImage(左下角 0,0)?在这里找不到类似这样的 swift 相关内容。

【问题讨论】:

    标签: ios swift coordinates core-image quartz


    【解决方案1】:

    您可以使用仿射变换矩阵,这个片段取自我的代码,用于从 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)
    

    【讨论】:

      【解决方案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)
      }
      

      【讨论】:

      • 是的,正如 dfd 所说。坐标值之间的唯一区别是视图在 y 轴上的高度。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-25
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      相关资源
      最近更新 更多