绘图时将变换应用于UIImage

试图将可缩放或旋转的较小图像叠加在较大的图像上:

+ (UIImage*)addToImage:(UIImage *)baseImage newImage:(UIImage*)newImage atPoint:(CGPoint)point transform:(CGAffineTransform)transform { UIGraphicsBeginImageContext(baseImage.size); [baseImage drawInRect:CGRectMake(0, 0, baseImage.size.width, baseImage.size.height)]; [newImage drawAtPoint:point]; //How would I apply the transform? UIImage* result = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return result; } 

在这种情况下,我将如何将CGAffineTransform应用于newImage?

您可以使用CoreImage框架,这允许在CIImage实例上进行转换。 例如:

 CGAffineTransform transform = ...; CIImage* coreImage = newImage.CIImage; if (!coreImage) { coreImage = [CIImage imageWithCGImage:newImage.CGImage]; } coreImage = [coreImage imageByApplyingTransform:transform]; newImage = [UIImage imageWithCIImage:coreImage]; 

你需要确保在调用.CIImage ,这不是nil 。 如果UIImage是用CGImage初始化的,就会发生这种情况。 如果是这种情况,那么你需要用适当的初始化程序自己分配一个CIImage

像这样的东西应该这样做:

 + (UIImage*) addToImage:(UIImage *)baseImage newImage:(UIImage*)newImage atPoint:(CGPoint)point transform:(CGAffineTransform)transform { UIGraphicsBeginImageContext(baseImage.size); CGContextRef context = UIGraphicsGetCurrentContext(); [baseImage drawInRect:CGRectMake(0, 0, baseImage.size.width, baseImage.size.height)]; // [newImage drawAtPoint:point]; draw without applying the transformation CGRect originalRect = CGRectMake(point.x, point.y, newImage.size.width, newImage.size.height); CGContextConcatCTM(context, transform); CGContextDrawImage(context, originalRect, newImage.CGImage); UIImage* result = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return result; }