Для iOS есть несколько API для изображений, и я понимаю ваше замешательство.Сначала у вас есть UIImage
, абстракция CocoaTouch для изображений.Тогда у вас есть CGImage
, абстракция CoreGraphics для изображений.И, кроме того, у вас есть CIImage
, абстракция CoreImage для изображений.
Это все разные сущности, которые нельзя использовать вместе без использования мостов.Вместо этого вам нужно конвертировать в и из разных форматов.
Как правило, в итоге вам нужно получить UIImage, который вы можете отобразить в виджете.Вы можете создать это изображение из CGImage
или CIImage
.CIImage
содержит расширенные функциональные возможности фильтра, которые, например, позволят вам поместить другое изображение сверху, как вы описываете, используя соответствующий композиционный фильтр.
CIImage
быстрее и лучше в любом случае, однако это все ещене полностью поддерживается в iOS.Возможно, вы еще не создали свои собственные пользовательские фильтры для iOS, и только часть фильтров еще не поддерживается.
Поэтому я бы порекомендовал использовать для этой цели CGImage
.Вам необходимо выполнить рендеринг в новый контекст рендеринга, а затем создать UIImage из этого контекста рендеринга.
Это должно сработать:
UIImage *originalImage = ...;
UIImage *frontImage = ...;
CGSize destinationSize = originalImage.frame.size;
UIGraphicsBeginImageContext(destinationSize);
[originalImage drawInRect:CGRectMake(0,0,destinationSize.width,destinationSize.height)];
[originalImage drawInRect:CGRectMake(10,10,destinationSize.width - 20,destinationSize.height - 20)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();