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

问题描述 投票:2回答:2

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

ios swift coordinates core-image quartz
2个回答
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)

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)
}
© www.soinside.com 2019 - 2024. All rights reserved.