Objective c 获取调整大小的图像的图像数据WithCapInsets:调整大小后

Objective c 获取调整大小的图像的图像数据WithCapInsets:调整大小后,objective-c,ios,uiimage,Objective C,Ios,Uiimage,我有一个png,我正在使用它作为另一个图像的图像掩码。这两个图像都有圆角,这些圆角将使用大小可调整的图像WithCapInsets:保留。图像(不是遮罩)正在自动调整大小,因为它是UIProgressView的progressImage 我遇到的问题是,如果我使用cgimamaskcreate创建一个遮罩,并简单地给它UIProgressView的宽度,遮罩图像会被拉伸(即,它不会保留封口) 我想做的是创建一个带有可调整大小的大写的新UIImage,手动调整图像大小(可能通过将其放在UIImag

我有一个png,我正在使用它作为另一个图像的图像掩码。这两个图像都有圆角,这些圆角将使用大小可调整的图像WithCapInsets:保留。图像(不是遮罩)正在自动调整大小,因为它是UIProgressView的progressImage

我遇到的问题是,如果我使用cgimamaskcreate创建一个遮罩,并简单地给它UIProgressView的宽度,遮罩图像会被拉伸(即,它不会保留封口)

我想做的是创建一个带有可调整大小的大写的新UIImage,手动调整图像大小(可能通过将其放在UIImageView中),获取调整大小版本的遮罩图像的数据表示,然后使用该数据创建一个新图像,并将该图像用作遮罩。但是,即使我使用图像创建UIImageView,然后适当地设置UIImageView的框架,从视图中恢复图像也会得到我的原始图像


是否有任何方法可以在不将图像实际绘制到UI中的情况下获得带capinsets:image的可调整大小的图像的结果?

我会尝试将图像逐块绘制到CGContext中,在CGContext中,您可以访问数据提供程序或通过创建UIImage提取NSData

- (UIImage*) drawImage:(UIImage *)image
                atSize:(CGSize) size
{
    UIGraphicsBeginImageContext(size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    [image drawInRect:CGRectMake(0, 0, size.width, size.height)];

    CGImageRef cgImage = CGBitmapContextCreateImage(context);
    UIImage *outImage = [UIImage imageWithCGImage:cgImage];

    CGImageRelease(cgImage);
    UIGraphicsEndImageContext();

    return outImage;
}