2010-04-19 9 views
0

Exemple de codeiPhone: Comment pouvez-vous dessiner un morceau d'une image

- (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);  
} 

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

Je voudrais copier un certain rect dans une image au contexte, donc pas toute l'image est dessinée, mais juste un morceau de l'image. Quelqu'un at-il une solution pour cela? Je ne trouve rien sur google ni sur la documentation.

Je sais qu'il existe des alternatives comme: 1. Créez un UIView avec écrêtage, puis positionnez simplement le UIImageView à l'intérieur. 2. Créez UIImageView dans UIScrollView et utilisez le décalage de contenu.

Mais je pense que ce sont boiteux ...

Répondre

1

Vous pouvez essayer CGImageCreateWithImageInRect

+0

Nope qui ne marchait pas merci pour votre effort si – Mark

+0

Salut Marc, s'il vous plaît voir la réponse de James ci-dessous. CGImageCreateWithImageInRect fonctionnera, c'est une façon légèrement plus nette d'atteindre la culture que vous avez atteinte ci-dessous. – adam

1

Ce travail a fait:

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

votre solution semble trop compliquer une tâche simple - Adam et James pointent dans la bonne direction – Till

7

CGImageCreateWithImageInRect devrait fonctionner correctement. C'est comme ça que je le fais. Voici un exemple:

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

Cet exemple obtient un CGImageRef de la propriété CGImage de another_UIImage, une instance de UIImage, puis cultures, et il se retourne en un UIImage avec la méthode constructeur imageWithCGImage de UIImage. Bonne chance!

James

Questions connexes