我想使用AVCaptureVideoPreviewLayer的实例方法“-captureDevicePointOfInterestForPoint:”,但该项目使用GPUImageView而不是AVCaptureVideoPreviewLayer。 有没有办法用GPUImageView将点转换为设备点?
答案 0 :(得分:0)
您可以通过两个步骤实现它:
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。