iPhone - 如何制作可调整大小的矩形来裁剪图像?

5

我正在尝试做一个可调整大小的矩形来裁剪我的图片,但是遇到了困难。我希望实现像这张图片一样的效果:

http://img192.imageshack.us/img192/8930/customcropbox.jpg

唯一的问题是我不知道该从哪里开始。我需要一些建议,如何实现这种裁剪效果。我应该阅读哪些文档?核心图像还是Quartz 2d?两者都需要吗?我从iPhone发布以来就一直在编码,但实际上从未使用过核心图像等。任何帮助或建议将不胜感激。当我实现它时,我会在这里展示我的代码。 :-) 此外,这个矩形框可以在UIImageView中移动,这使它更加有趣。感谢您的帮助,期待实现此目标。


你好,这个链接可能会对你有所帮助,请查看一下:https://github.com/barrettj/BJImageCropper/network/members - RayofHope
你好,你解决了这个问题吗?我也遇到了完全相同的问题。 - ScarletWitch
1
如果你想像下面的图片 https://raw.github.com/yuyak/YKImageCropper/master/Example/screenshot.png 那样进行裁剪,那么请使用这个:https://github.com/yuyak/YKImageCropper - RayofHope
2个回答

1

收藏我的问题,它完全相同。

我已经成功移动了我的裁剪视图,并正确显示了图像的部分,但处理滚动视图缩放仍在进行中。目前,我在UIScrollview中叠加了一个imageview和普通UIView,然后在scrollview之外,在更高的级别上是我的自定义裁剪UIView。我实现了触摸方法来处理拖动它的位置,并且也使用drawRect:方法绘制它。

- (void)drawRect:(CGRect)rect {
    // Drawing code
    if( self.image == nil )
        return;

    CGPoint offset = scrollView.contentOffset;
    clipRect = CGRectOffset(self.frame, offset.x, offset.y);

    UIImage *croppedImage = [image croppedImage:clipRect];
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    [croppedImage drawAtPoint:CGPointMake(0, 0)];
}

注意:我的裁剪视图不是UIImageView的子类,它只是一个UIView,并引用其他视图中底层图像。
"croppedImage"是UIImage的一个分类,非常简单:
@implementation UIImage (Resize)
- (UIImage *)croppedImage:(CGRect)bounds {
    CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], bounds);
    UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);
    return croppedImage;
}
...
@end

我已经实现了一些UIScrollViewDelegate方法,并通过滚动活动传递,以便我可以保持我的裁剪视图同步。缩放也被传递了,但是如上所述,还没有达到预期的效果。

另一个注意事项:我认为没有必要浪费时间每次生成一个新的UIImage来裁剪区域,因为应该可以使用相同的方法。

CGImageRef imageRef = CGImageCreateWithImageInRect([yourImage CGImage], bounds);
and 
CGContextDrawImage(ctx, clipRect, imageRef);

1
Quartz是Core Graphics的“营销术语”,这就是你应该开始的地方。你需要使用UIView(在-drawRect:中进行完全自定义绘制),捕获和跟踪它的触摸,然后绘制结果。你可以使用UIGraphicsGetCurrentContext()获取当前的图形上下文。这应该足以让你开始了!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接