我正在实施裁剪功能,并且我试图弄清楚如何测试裁剪矩形是否完全包含在变换后的图像视图中。即图像的裁剪部分应该没有空格。
我已经尝试复制此组件中实现的行为:https://github.com/heitorfr/ios-image-editor,它实现了类似的检查(见下文),但我无法让它适用于我的情况。
- (void)checkBoundsWithTransform:(CGAffineTransform)transform
{
CGRect r1 = [self boundingBoxForRect:self.preview.cropRect
rotatedByRadians:[self imageRotation]];
Rectangle r2 = [self applyTransform:transform
toRect:self.preview.initialImageFrame];
CGAffineTransform t =
CGAffineTransformMakeTranslation(CGRectGetMidX(self.preview.cropRect),
CGRectGetMidY(self.preview.cropRect));
t = CGAffineTransformRotate(t, -[self imageRotation]);
t = CGAffineTransformTranslate(t,
-CGRectGetMidX(self.preview.cropRect), -
CGRectGetMidY(self.preview.cropRect));
Rectangle r3 = [self applyTransform:t toRectangle:r2];
if(CGRectContainsRect([self CGRectFromRectangle:r3],r1)) {
self.validTransform = transform;
}
}
答案 0 :(得分:1)
不是最高性能的解决方案,但非常快速和肮脏。
NSBezierPath *path = [NSBezierPath bezierPathWithRect:r2];
[path transformUsingAffineTransform:t];
if([path containsPoint:NSMinX(r1)]
&& [path containsPoint:NSMinY(r1)]
&& [path containsPoint:NSMaxX(r1)]
&& [path containsPoint:(NSMaxY(r1)] ){
self.validTransform = transform;
}