У меня возникла проблема, когда дело доходит до обрезания фотографии в пользовательский UIBezierPath. Вместо того, чтобы отображать область внутри пути, как и следовало ожидать, она отображает другую часть фотографии (разного размера и положения, чем там, где она должна быть, но все равно такая же форма, как была нарисована). Примечание. Я также хотел бы сохранить полное качество оригинальной фотографии.Обрезание UIImage пользовательской UIBezierPath при сохранении качества изображения
Я включил фотографии и подписи ниже, чтобы объяснить мою проблему более подробно. Если кто-то может дать мне другой способ сделать такое, я с радостью начну.
Выше иллюстрация UIImage внутри UIImageView, все в пределах UIView которого CAShapeLayer, который отображает UIBezierPath является подслоем. В этом примере предположим, что путь в красном был нарисован пользователем.
На этой диаграмме изображен CAShapeLayer и графический контекст, созданный с размером оригинального изображения. Как бы я закрепил контекст, чтобы получить результат ниже (пожалуйста, извините его беспорядок)?
Это результат, который я хотел бы получить, когда все будет сказано и сделано. Примечание. Мне бы хотелось, чтобы он по-прежнему был того же размера и качества, что и оригинал.
Вот некоторые соответствующие части моего кода:
Это клипы изображения на пути
-(UIImage *)maskImageToPath:(UIBezierPath *)path {
// Precondition: the path exists and is closed
assert(path != nil);
// Mask the image, keeping original size
UIGraphicsBeginImageContextWithOptions(self.size, NO, 0);
[path addClip];
[self drawAtPoint:CGPointZero];
// Extract the image
UIImage *maskedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return maskedImage;
}
Это добавляет очков к UIBezierPath
- (void)drawClippingLine:(UIPanGestureRecognizer *)sender {
CGPoint nextPoint = [sender locationInView:self];
// If UIBezierPath *clippingPath is nil, initialize it.
// Otherwise, add another point to it.
if(!clippingPath) {
clippingPath = [UIBezierPath bezierPath];
[clippingPath moveToPoint:nextPoint];
}
else {
[clippingPath addLineToPoint:nextPoint];
}
UIGraphicsBeginImageContext(_image.size);
[clippingPath stroke];
UIGraphicsEndImageContext();
}
Все ваши изображения под углом, вы применяете преобразования? Покажите скриншот фактического результата, которого вы достигнете. – Wain