2010-02-09 7 views
5

To prawdopodobnie nie jest tak trudne, jak myślę, ale jak mogę wybrać część obrazu? Rozważmy następujący przykład:wybierz część obrazu (przycinanie)

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

Szara strefa jest obraz w formacie JPG lub PNG, teraz chcę, aby wybrać czerwony 80x80 px obszar od niego. Czerwony obszar powinien być wyświetlany, reszta nie. Próbowałem wielu metod:

  • Bądź clipsToBounds z UIImageView na TAK i próbie wyrównania obrazu (nie działa)
  • Klip górny widok (nie działa)

Spojrzałem także na funkcje rysowania, ale jeszcze nie pracowałem z nimi i wydawało mi się to trochę zbyt daleko. Czy istnieje jakiś oczywisty sposób robienia tego, co chcę zrobić, czego mi brakuje? Nie chcę zmienić rozmiaru obrazu, tylko przyciąć.

Dziękujemy za poświęcony czas!

+0

+1 za doskonałe wyjaśnienie Twojego pytania. – kubilay

Odpowiedz

4

Jeśli chcesz tylko pokazać centrum obrazu typu A UIImageView ustawić tryb zawartości do „Aspect fill” poprzez IB. To ją wyśrodkuje i pozbędzie się niczego dodatkowego.

Lub w kodzie

myImageView.contentMode = UIViewContentModeScaleAspectFill; 
+0

To nie działa. –

7

Ukryj poniższy kod pod numerem this i wyszukaj odpowiedź 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' to podstęp tutaj. Dziękujemy +1 –

1

Patrz poniższy kod. Tutaj zapewniam podgląd obrazu i podzielenie go na dwa równe obrazy.

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