У меня есть фон UIImage, и я хотел бы обрезать фон UIImage с помощью настраиваемой формы, чтобы это фоновое изображение только «появлялось» через пользовательскую форму. Например, у меня есть форма формы в форме луны, и мне хотелось бы, чтобы фоновое изображение проникало только на лунную часть.Обрезка UIImage пользовательской формой
на основе другого ответа, я пытаюсь наложить маску на изображение, как так:
- (UIImage *)createImageFromImage:(UIImage *)image
withMaskImage:(UIImage *)mask {
CGImageRef imageRef = image.CGImage;
CGImageRef maskRef = mask.CGImage;
CGImageRef imageMask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef),
NULL,
YES);
CGImageRef maskedReference = CGImageCreateWithMask(imageRef, imageMask);
CGImageRelease(imageMask);
UIImage *maskedImage = [UIImage imageWithCGImage:maskedReference];
CGImageRelease(maskedReference);
return maskedImage;
}
Однако результат этого выглядит , и есть несколько проблем с ним:
- Луна у меня есть 100 * 100, это растянулось, сделав странную пропорцию
- Моя цель только для изображения, которое должно пройти через луну - однако в настоящий момент луна - это белая фигура, которая наступает изображение
Любые идеи о том, как я мог бы исправить проблему урожая, будут высоко оценены. Благодаря!
Вы можете использовать эту библиотеку для любой пользовательской формы. Просто нарисуйте свой путь, и вы получите обрезанное изображение. https://www.cocoacontrols.com/controls/mdimagecroper –