iPhone. Как сделать прямоугольник с изменяемым размером для обрезки изображений?

У меня возникли проблемы с созданием прямоугольника с изменяемым размером для обрезки моих изображений. Я пытаюсь добиться чего-то вроде этой картинки:

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

Ну, единственная проблема в том, что я понятия не имею, с чего начать. Мне нужен совет, как добиться такого эффекта кадрирования. Какую документацию я должен прочитать? Core Graphics или Quartz 2D? Оба? Я программировал для iPhone с момента его выпуска, но на самом деле я никогда не использовал основную графику и т. Д. Любая помощь или совет будут очень признательны. Я буду выкладывать сюда свой код по мере продвижения, чтобы показать, как это делается, когда я этого добьюсь. :-) Кроме того, этот прямоугольный блок можно перемещать по экрану в UIImageView, что делает его более интересным. Спасибо за помощь, и я с нетерпением жду достижения этой цели.


person 0SX    schedule 28.12.2009    source источник
comment
Здравствуйте, это может помочь вам, просто взгляните один раз: github.com/barrettj/BJImageCropper/network /члены   -  person RayofHope    schedule 23.03.2012
comment
Привет, ты нашел решение для этого? Я столкнулся с точно такой же проблемой.   -  person ScarletWitch    schedule 14.05.2013
comment
Если вы хотите обрезать изображение, как показано ниже, raw.github.com/yuyak /YKImageCropper/master/Example/, затем используйте этот: github.com/yuyak/YKImageCropper   -  person RayofHope    schedule 23.07.2013


Ответы (2)


добавьте в закладки мой вопрос, который точно такой же.

Я дошел до того, что перемещался по моему виду обрезки и правильно отображал часть изображения, но работа с масштабированием прокрутки находится в стадии разработки. в настоящее время у меня есть изображение и простой UIView, многоуровневый в UIScrollview, затем за пределами прокрутки и на более высоком уровне находится мой пользовательский 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);
person wkw    schedule 21.04.2010

Кварц — это «маркетинговый термин» для Core Graphics, и именно с него вам следует начать. Вы захотите использовать UIView (полный пользовательский рисунок в -drawRect:), перехватывать и отслеживать его касания, а затем рисовать результат. Вы можете получить текущий графический контекст, используя UIGraphicsGetCurrentContext(). Этого должно быть достаточно, чтобы вы начали!

person Ben Gottlieb    schedule 28.12.2009