2010-02-09 21 views
5

Ce n'est probablement pas aussi difficile que je le pense, mais comment puis-je sélectionner une partie d'une image? Prenons l'exemple suivant:Sélectionner une partie de l'image (écrêtage)

alt text http://img683.imageshack.us/img683/2680/imagepart.jpg

La zone grise est une image au format PNG ou JPG, maintenant je veux sélectionner la zone de 80x80 rouge px de lui. La zone rouge devrait être affichée, le reste non. J'ai essayé de nombreuses approches:

  • Faire clipsToBounds de UIImageView OUI et essayer de compenser l'image (ne fonctionne pas)
  • Clip de la vue du dessus (ne fonctionne pas)

J'ai également jeté un coup d'œil sur les fonctions de dessin, mais je n'ai pas encore travaillé avec celles-ci et cela m'a semblé un peu tiré par les cheveux. Existe-t-il un moyen évident de faire ce que je veux faire que je manque? Je ne veux pas que l'image soit redimensionnée, juste coupée.

Merci pour votre temps!

+0

+1 pour une meilleure explication de votre question. – kubilay

Répondre

4

Si vous voulez seulement montrer le centre de l'image d'un UIImageView régler le mode de contenu « Aspect de remplissage » via IB. Cela va le centrer et recadrer tout extra.

Ou dans le code

myImageView.contentMode = UIViewContentModeScaleAspectFill; 
+0

Cela ne fonctionne pas .. –

7

A volé le code ci-dessous de this question et recherchez la réponse de HitScan.

CGImageRef imageRef = CGImageCreateWithImageInRect([largeImage CGImage], cropRect); 
// or use the UIImage wherever you like 
[UIImageView setImage:[UIImage imageWithCGImage:imageRef]]; 
CGImageRelease(imageRef); 
3
myImageView.contentMode = UIViewContentModeCenter; 
myImageView.clipsToBounds = YES; 
+0

'clipsToBounds' est l'astuce ici. Merci +1 –

1

Reportez-vous au code ci-dessous. Ici, je fournis une vue d'image et divise la même chose en deux images vues égales.

- (void)splitImageView:(UIImageView*)imgView{ 

UIImage *image = imgView.image; 
CGRect rectForDrawing = CGRectMake(0, 0, imgView.frame.size.width/2, imgView.frame.size.height); 

CGRect leftRect = CGRectMake(0, 0, imgView.frame.size.width/2, imgView.frame.size.height); 
CGRect rightRect = CGRectMake(imgView.frame.size.width/2, 0, imgView.frame.size.width/2, imgView.frame.size.height); 


CGImageRef leftReference = CGImageCreateWithImageInRect([image CGImage], leftRect); 
CGImageRef rightReference = CGImageCreateWithImageInRect([image CGImage], rightRect); 

UIGraphicsBeginImageContextWithOptions(rectForDrawing.size, NO, 0); 
    CGContextRef con = UIGraphicsGetCurrentContext(); 
    CGContextDrawImage(con, rectForDrawing,flip(leftReference)); 
    imgViewLeft = [[UIImageView alloc] initWithImage:UIGraphicsGetImageFromCurrentImageContext()]; 
    imgViewLeft.frame = CGRectMake(imgView.frame.origin.x, imgView.frame.origin.y, 
           imgView.frame.size.width/2, imgView.frame.size.height); 

    CGContextDrawImage(con, rectForDrawing,flip(rightReference)); 
    imgViewRight = [[UIImageView alloc] initWithImage:UIGraphicsGetImageFromCurrentImageContext()]; 
    imgViewRight.frame = CGRectMake(imgView.frame.origin.x+imgView.frame.size.width/2, imgView.frame.origin.y, 
           imgView.frame.size.width/2, imgView.frame.size.height); 


UIGraphicsEndImageContext(); 


[self.view addSubview:imgViewLeft]; 
[self.view addSubview:imgViewRight]; 
} 
Questions connexes