Могу ли я испечь / сгладить UIImageView, включая его слой с закругленными углами и masksToBounds - PullRequest
1 голос
/ 25 октября 2011

Я пытаюсь сгладить некоторые изображения, полученные с сервера, до 40 x 40 миниатюр, чтобы я мог сохранить их в / Library / Caches и использовать их вместо этого с UIImage UITableViewCell.

Пока что,Я знаю, как запекать / выравнивать изображение, например, так:

 UIImage *newThumbnail = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imageURL]]];

  UIGraphicsBeginImageContext(CGSizeMake(40, 40));
  [newThumbnail drawInRect:CGRectMake(0, 0, 40, 40)];
  newThumbnail = UIGraphicsGetImageFromCurrentImageContext();      
  UIGraphicsEndImageContext();

  [UIImagePNGRepresentation(newThumbnail) writeToFile:imageCachePath atomically:YES];

Я также хотел бы включить скругленные углы в сглаженное изображение.Но сейчас я создаю закругленные углы, манипулируя слоем UIImageView, в котором находится UIIMage.Вот так:

  imageView.layer.cornerRadius = 7.0;
  imageView.layer.masksToBounds = YES;
  imageView.layer.borderColor = [UIColor blackColor].CGColor;
  imageView.layer.borderWidth = 1.0;

Итак, как мне включить вышеуказанные модификации слоя в механизм UIGraphicsBeginImageContext?Или есть ли лучший способ сделать это?

1 Ответ

2 голосов
/ 25 октября 2011

Вариант (1), который включает в себя больше обучения и больше работы, но более гибкий:

Просмотрите документы CGContextRef.

Рисунок, как нарисовать закругленный угол пути. (Существует множество примеров кода, плавающих в интернете с использованием CTM.)

Чтобы смоделировать cornerRadius и masksToBounds, используйте этот путь для установки обтравочного контура перед рисованием изображения.

Чтобы смоделировать borderColor плюс borderWidth, установите соответствующий цвет обводки и ширину, а затем обведите этот путь.

Опция (2):

Попробуйте перевести UIImageView.layer в свой контекст с помощью renderInContext:.

...