-1

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

我的原图

我的问题:

如何从这个图像创建另一个 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 的图像时,我得到一个顶部和底部边框非常细的图像。

我得到的坏结果

我需要的是边框将保持相同的宽度
在此处输入图像描述

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

4

1 回答 1

1

您可以使用 resizableImageWithCapInsets:

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

我从未在 CGContextDrawImage 中使用过这种方法,但它应该可以工作。

于 2013-03-10T15:51:48.247 回答