目标c - UIImage调整大小问题

时间:2013-03-10 15:48:47

标签: iphone ios objective-c uiimage cgimage

我有一个显示相框(边框)的资源(.png文件) 此.png文件的大小为100x100px,边框宽度为10px。

my original image

我的问题:

如何在不破坏边框宽度的情况下,使用不同的尺寸从此图像创建另一个UIImage?

问题:

当我尝试使用CGContextDrawImage从原始图像中绘制新图像时,我得到一个新尺寸的新图像,但我的边框比例是毁了。

        CGRect newRect = CGRectIntegral(CGRectMake(0, 0, newWidth, newHeight));
        CGImageRef imageRef = //... the image

        // Build a context that's the same dimensions as the new size
        CGContextRef bitmap = CGBitmapContextCreate(NULL,
                                                    newRect.size.width,
                                                    newRect.size.height,
                                                    CGImageGetBitsPerComponent(imageRef),
                                                    0,
                                                    CGImageGetColorSpace(imageRef),
                                                    CGImageGetBitmapInfo(imageRef));


        // Set the quality level to use when rescaling
        CGContextSetInterpolationQuality(bitmap, kCGInterpolationHigh);

        // Draw into the context; this scales the image
        CGContextDrawImage(bitmap, newRect, imageRef);

        // Get the resized image from the context and a UIImage
        CGImageRef newImageRef = CGBitmapContextCreateImage(bitmap);
        UIImage *newImage = [UIImage imageWithCGImage:newImageRef];

        // Clean up
        CGContextRelease(bitmap);
        CGImageRelease(newImageRef);

例如,当我尝试创建800x100p的图像尺寸时,我得到的图像顶部和底部边框非常薄。

the bad result I get

我需要的是边框将保持相同的宽度 enter image description here

*注意
使用resizableImageWithCapInsets:不会帮助我,因为我需要一个新尺寸的新图像来保存在光盘上。

1 个答案:

答案 0 :(得分:1)

您可以使用resizableImageWithCapInsets:

UIImage *img = [UIImage imageNamed:@"myResource"];
img = [img resizableImageWithCapInsets:UIEdgeInsetsMake(10,10,10,10)];

我从未在CGContextDrawImage中使用过这种方法,但它应该有用。