Как стереть часть UIImage - PullRequest
       29

Как стереть часть UIImage

2 голосов
/ 24 декабря 2010

Есть ли способ удалить черный фон для этого изображения alt text

Я нашел этот пример кода, найденный по этой теме , но я не понимаю, как это работает

- (void)clipImage {
  UIImage *img = imgView.image;
  CGSize s = img.size;
  UIGraphicsBeginImageContext(s);
  CGContextRef g = UIGraphicsGetCurrentContext();
  CGContextAddPath(g,erasePath);
  CGContextAddRect(g,CGRectMake(0,0,s.width,s.height));
  CGContextEOClip(g);
  [img drawAtPoint:CGPointZero];
  imageView.image = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
}

Возможно, я ошибаюсь.

С уважением,
kl94

Ответы [ 2 ]

4 голосов
/ 24 декабря 2010

Код использует кварц (графический движок iPhone) для обрезки изображения.некоторые детали:

UIGraphicsBeginImageContext(s);
CGContextRef g = UIGraphicsGetCurrentContext();

Сначала вам понадобится какая-то "цель", чтобы нарисовать.В графике это обычно называется контекстом.Выше вы сообщаете системе, что необходим (растровый) контекст изображения с заданным размером, а затем вы получаете ссылку на него.

CGContextAddPath(g,erasePath);
CGContextAddRect(g,CGRectMake(0,0,s.width,s.height));
CGContextEOClip(g);

Здесь вы указываете путь к контексту, а затем обрезаете контекст,То есть «рисовать только в этих регионах».

[img drawAtPoint:CGPointZero];

Вы рисуете изображение в новом контексте.Будет прорисована только область обрезки, поэтому все остальное будет эффективно стерто.

imageView.image = UIGraphicsGetImageFromCurrentImageContext();

Теперь здесь вы просто попросите систему вернуть изображение, нарисованное в контексте (цели), который вы установили выше

Примечание: это грубое описание, вы можете взглянуть на ссылку для каждой функции, чтобы получить более подробную информацию.

0 голосов
/ 08 декабря 2013

Вот как получить «erasePath».Просто передайте выбранный CGRect, который вы хотите обрезать, как «cropRect» -

CGMutablePathRef erasePath = CGPathCreateMutable();
CGPathAddRect(erasePath, NULL, cropRect);
CGContextAddPath(g,erasePath);
...