iPhone: Как вы можете нарисовать кусок изображения - PullRequest
0 голосов
/ 20 апреля 2010

Пример кода

- (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 и используйте смещение содержимого.

Но я думаю, что это неубедительно ...

Ответы [ 3 ]

7 голосов
/ 20 апреля 2010

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

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

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

Джеймс

1 голос
/ 20 апреля 2010

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

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();
1 голос
/ 20 апреля 2010

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

...