2012-06-20 3 views
1

Я пытаюсь получить видимую часть UIImage от UIImageView. UIImageView занимает весь экран. Pinch & Жест жесткости добавлен к UIImageView. Таким образом, пользователь может панорамировать/увеличивать изображение. После панорамирования/масштабирования я хочу обрезать только видимую часть изображения. Я пробовал несколько методов. Но он возвращает мне неправильную часть изображения.iOS получить видимую часть изображения для UIImageView

Спасибо заранее.

+1

Пожалуйста, поделитесь код кадрирования, спасибо – doNotCheckMyBlog

ответ

1

Спасибо все. Я выяснил решение. Вот код, который я использовал для получения видимой части изображения. (Имейте это в виду, что изображение не было полностью видно при увеличении или сковорода из-за его принимает весь экран)

- (UIImage *)cropVisiblePortionOfImageView:(UIImageView *)imageView { 

    CGFloat zoomScaleX=imageView.frame.size.width/initialWidth; 
    CGFloat zoomScaleY=imageView.frame.size.height/initialHeight; 
    CGSize zoomedSize=CGSizeMake(initialWidth*zoomScaleX,initialHeight*zoomScaleY); 

    UIGraphicsBeginImageContext(zoomedSize); 
    [imageView.image drawInRect:CGRectMake(0, 0, zoomedSize.width, zoomedSize.height)]; 
    UIImage *zoomedImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    UIGraphicsBeginImageContext(CGSizeMake(initialWidth, initialHeight)); 
    [zoomedImage drawAtPoint:CGPointMake(imageView.frame.origin.x, imageView.frame.origin.y)]; 
    UIImage *cropedImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return cropedImage; 
} 
9

Включить рамки QuartzCore в свой проект и реализовать этот метод для получения видимой части изображения с вашей точки зрения изображения: (одно примечание: я имею в виду, что вы используете ARC в вашем проекте)

#import <QuartzCore/QuartzCore.h> 

- (UIImage*)imageFromImageView:(UIImageView*)imageView 
{ 
    UIGraphicsBeginImageContext(imageView.frame.size); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextRotateCTM(context, 2*M_PI); 

    [imageView.layer renderInContext:context]; 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return image; 
} 
+0

Спасибо за ваш ответ. –

+0

Большое спасибо #DizAsm. Он отлично работает для моего изображения. Я установил ниже свойство для своего изображения. [ImageView setClipsToBounds: YES]; и imageView.contentMode = UIViewContentModeScaleAspectFill. Было очень сложно получить точное изображение из видимой области просмотра изображения. Теперь он работает отлично. – Rajesh

Смежные вопросы