выбрать часть изображения (отсечение) - PullRequest
5 голосов
/ 10 февраля 2010

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

alt text

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

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

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

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

Ответы [ 4 ]

7 голосов
/ 10 февраля 2010

Украл код ниже из этого вопроса и ищите ответ HitScan.

CGImageRef imageRef = CGImageCreateWithImageInRect([largeImage CGImage], cropRect);
// or use the UIImage wherever you like
[UIImageView setImage:[UIImage imageWithCGImage:imageRef]]; 
CGImageRelease(imageRef);
4 голосов
/ 10 февраля 2010

Если вы хотите показать только центр изображения a UIImageView, установите режим содержимого «Aspect Fill» через IB. Это отцентрирует его и обрежет все лишнее.

или в коде

myImageView.contentMode = UIViewContentModeScaleAspectFill;
3 голосов
/ 28 ноября 2012
myImageView.contentMode = UIViewContentModeCenter;
myImageView.clipsToBounds = YES;
1 голос
/ 04 декабря 2012

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

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