将UIKit坐标转换为Quartz / CoreImage(Swift)

时间:2017-03-02 12:43:44

标签: ios swift coordinates core-image quartz

有没有办法将UIKit坐标(0,0左上角)转换为Quartz / CoreImage(0,0左下角)?在这里找不到像这样迅速相关的东西。

2 个答案:

答案 0 :(得分:3)

你可以使用仿射变换矩阵,这个剪切是从我的代码中取出来从Core Image / Core图形转换为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)

答案 1 :(得分: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)
}