0

我正在实现裁剪功能,并试图弄清楚如何测试裁剪矩形是否完全包含在转换后的图像视图中。即图像的裁剪部分不应该有空白。检查CGRect是否包含在另一个(已转换的)矩形中

我试图复制在这个组件中实现的行为: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

可能重复(http://stackoverflow.com/questions/8981931/cgrectcontainsrect-not-working) – Palpatim

+1

这不是可以用CGRectContainsRect()来解决问题,因为图像视图的变换矩形可以旋转。即它不能用CGRect – Niels

回答

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; 
} 
[CGRectContainsRect不工作]的
+0

表达我没有想过使用NSBezierPath(或我的例子中的UIBezierPath)。好主意,谢谢! – Niels

相关问题