2010-02-09 8 views
5

Возможно, это не так сложно, как я думаю, но как я могу выбрать часть изображения? Рассмотрим следующий пример:выберите часть изображения (обрезка)

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

Серая зона представляет собой изображение в формате PNG или JPG формат, теперь я хочу, чтобы выбрать красную 80x80 область пикс от него. Красная область должна отображаться, а остальная часть - нет. Я попробовал множество подходов:

  • Сделать clipsToBounds из UIImageView ДА и пытаются компенсировать изображение (не работает)
  • Обрежьте верхний вид (не работает)

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

Спасибо за ваше время!

+0

+1 для отличного объяснения вашего вопроса. – kubilay

ответ

4

Если вы хотите, чтобы показать центр изображения Л UIImageView установить режим контента «Аспект Заполненный» через IB. Это будет сосредоточено на нем и обрушится на что-нибудь дополнительное.

Или в коде

myImageView.contentMode = UIViewContentModeScaleAspectFill; 
+0

Это не работает. –

7

Заберите код ниже от this и найдите ответ 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' - это трюк. Спасибо +1 –

1

См ниже код. Здесь я предоставляю изображение и разбиваю его на два равных изображения.

- (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]; 
} 
Смежные вопросы