尝试将可缩放或旋转的较小图像叠加到较大的图像上:
+ (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?
答案 0 :(得分:7)
您可以使用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
。
答案 1 :(得分:1)
这样的事情应该这样做:
+ (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;
}