绘图时将变换应用于UIImage

sol*_*eil 4 quartz-graphics uiimage cgaffinetransform ios

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

+ (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;
}
Run Code Online (Sandbox Code Playgroud)

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

WDU*_*DUK 7

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

CGAffineTransform transform = ...;
CIImage* coreImage = newImage.CIImage;

if (!coreImage) {
    coreImage = [CIImage imageWithCGImage:newImage.CGImage];
}

coreImage = [coreImage imageByApplyingTransform:transform];
newImage = [UIImage imageWithCIImage:coreImage];
Run Code Online (Sandbox Code Playgroud)

你需要确保在通话后.CIImage,事实并非如此nil.如果UIImage使用a初始化,则会发生这种情况CGImage.如果是这种情况,那么您需要CIImage使用适当的初始化程序分配自己.