如何使用GPUImageView将点转换为设备点?

时间:2018-03-15 03:43:02

标签: ios objective-c

我想使用AVCaptureVideoPreviewLayer的实例方法“-captureDevicePointOfInterestForPoint:”,但该项目使用GPUImageView而不是AVCaptureVideoPreviewLayer。 有没有办法用GPUImageView将点转换为设备点?

1 个答案:

答案 0 :(得分:0)

您可以通过两个步骤实现它:

  1. 将坐标从OpenGL转换为GPUImageView。
  2. 使用UIView的方法将坐标从GPUImageView转换为其他UIView或设备。
  3. GPUImage中的OpenGL有下一个坐标系:X:[ - 1.0,1.0](从左到右),Y:[ - 1.0,1.0](从下到上)。

    我们可以得到下一个仿射变换来将点从OpenGL转换为GPUImageView:

    //self is GPUImageView
    CGAffineTransform moveToPositive = CGAffineTransformMakeTranslation(1.0, 1.0);
    CGAffineTransform normolizeTransform = CGAffineTransformMakeScale(1.0 / 2.0, 1.0 / 2.0);
    CGAffineTransform invertion = CGAffineTransformConcat(CGAffineTransformMakeScale(1.0, -1.0), CGAffineTransformMakeTranslation(0.0, 1.0));
    CGAffineTransform scaleToSelfBounds = CGAffineTransformMakeScale(CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds));
    
    CGAffineTransform resultTransform = CGAffineTransformConcat(CGAffineTransformConcat(CGAffineTransformConcat(moveToPositive, normolizeTransform), invertion), scaleToSelfBounds);
    

    您可以使用此转换将点从OpenGL转换为GPUImageView。