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

时间:2009-12-28 21:01:29

标签: iphone iphone-sdk-3.0 crop iphone-sdk-3.1

我在制作重新调整大小的矩形以修剪图像方面遇到了麻烦。我正在尝试实现这样的图片:

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

嗯,唯一的问题是我不知道从哪里开始。我需要一些建议来实现如何实现裁剪效果。我应该阅读哪些文件?核心图形或Quartz 2d?都?自从发布日期以来,我一直在为iPhone编码,但我从未真正使用核心图形等。任何帮助或建议都会非常感激。我将把我的代码放在这里,因为我在进展时展示了当我实现它时它是如何完成的。 :-)此外,这个矩形框可以在UIImageView屏幕上移动,这使它更有趣。感谢您的帮助,我期待着实现这一目标。

2 个答案:

答案 0 :(得分:1)

Quartz是Core Graphics的“营销术语”,这就是你应该从哪里开始的。您将要使用UIView(-drawRect :)中的完全自定义绘图,陷阱并跟踪其触摸,然后绘制结果。您可以使用UIGraphicsGetCurrentContext()获取当前的图形上下文。这应该足以让你开始!

答案 1 :(得分:1)

将我的question添加为完全相同的书签。

我尽可能地移动我的裁剪视图并让它正确显示图像的一部分,但处理scrollview缩放是一项正在进行的工作。目前我在UIScrollview中有一个imageview和简单的UIView,然后在scrollview之外,在更高级别是我的自定义裁剪UIView。我实现了touches方法来处理拖动它,还有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);