2010-04-19 5 views
0

Пример кодаiPhone: Как вы можете нарисовать часть изображения

- (void)drawRect:(CGRect)rect { 
    [super drawRect:rect]; 

    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGContextSaveGState(context); 
    CGContextTranslateCTM(context, 0, self.frame.size.height); 
    CGContextScaleCTM(context, 1.0, -1.0); 

    CGContextDrawImage(context, CGRectMake(0.0, 0.0, self.frame.size.width, self.frame.size.height), [UIImage imageNamed:@"sample.png"].CGImage); 

    CGContextRestoreGState(context);  
} 

================

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

Я знаю, что есть альтернативы, такие как: 1. Создайте UIView с отсечением, а затем просто разместите UIImageView внутри него. 2. Создайте UIImageView в UIScrollView и используйте смещение содержимого.

Но я думаю, что те хромает ...

ответ

1

Вы можете попробовать CGImageCreateWithImageInRect

+0

Нету, которые не работали спасибо за ваши усилия, хотя – Mark

+0

Hi Mark, смотрите, пожалуйста, ответ Джеймса ниже. CGImageCreateWithImageInRect будет работать, это немного более аккуратный способ достижения урожая, как вы сделали ниже. – adam

1

Это сделал работа:

UIGraphicsBeginImageContext(rect.size); 
CGContextRef currentContext = UIGraphicsGetCurrentContext(); 

CGRect clippedRect = CGRectMake(0, 0, rect.size.width, rect.size.height); 
CGContextClipToRect(currentContext, clippedRect); 

CGRect drawRect = CGRectMake(rect.origin.x * -1, 
          rect.origin.y * -1, 
          imageToCrop.size.width, 
          imageToCrop.size.height); 

CGContextDrawImage(currentContext, drawRect, imageToCrop.CGImage); 

UIImage *cropped = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 
+0

Ваше решение кажется слишком сложным - адам и Джеймс указывают в правильном направлении – Till

7

CGImageCreateWithImageInRect должен работать нормально. Вот как я это делаю. Вот пример:

CGImageRef ref = CGImageCreateWithImageInRect(some_UIImage.CGImage, CGRectMake(x, y, height, width)); 
UIImage *img = [UIImage imageWithCGImage:ref]; 

Этот пример получает CGImageRef из свойства CGImage из another_UIImage, экземпляр UIImage, затем обрезает его, и превращает его обратно в UIImage с методом конструктора imageWithCGImage UIImage в. Удачи!

Джеймс

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