2
我遇到了使用GPUImage转换过滤器的问题。我正在使用平移手势识别器重新定位图像。我有的代码有效,但图像以大约一半的速度移动。如果我的坐标增加了一倍,图像就会像预期的那样拖动。但是,当我开始新的平移手势时,图像会跳到距离中心两倍的点。也许我的数学是关闭的。有任何想法吗?或者,任何人都可以提出比我在这里有更好的解决方案吗?使用GPUImageTransformFilter和iOS平移GPUImage位置Pan手势?
- (void)move:(UIPanGestureRecognizer *)sender {
// Translated CGPoint from GPUImageView
CGPoint translation = [sender translationInView:self.primaryImageView];
// Current transform from GPUImageTransformFilter
CGAffineTransform currentTransform = self.transFilter.affineTransform;
// Size of GPUImageView bounds for later calculations
CGSize size = self.primaryImageView.bounds.size;
if ([sender state] == UIGestureRecognizerStateBegan) {
// Set a beginning CGPoint
// Multiply GPUImageView bounds by current transform to get
// the translated coordinates in pixels.
self.beginPoint = CGPointMake(size.width*currentTransform.tx, size.height*currentTransform.ty);
}
// Calculate difference from beginning point to translated point
CGPoint updatedPoint = CGPointMake(self.beginPoint.x+translation.x, self.beginPoint.y+translation.y);
// Create a new transform translation.
// Divide updated coordinates by GPUImageView bounds to get
// a percentage value (-1 to 1)
CGAffineTransform newTransform = CGAffineTransformMakeTranslation(updatedPoint.x/(size.width), updatedPoint.y/(size.height));
// Apply new transform to filter and process.
[self.transFilter setAffineTransform:newTransform];
[self.sourcePicture processImage];
}
不是试图抽出矩阵组件,而是使用'CGAffineTransformTranslate()'递增地转换回来的变换呢?然后,您只需从CGPoint翻译中进行缩放,即可返回到GPUImage的转换。 – 2013-03-01 03:45:01
感谢您的建议(以及伟大的图书馆)@BradLarson。我想出了一个使用CGAffineTransformTranslate()(解答)的解决方案。我也必须考虑到变换比例。 – Corey 2013-03-01 17:30:41