額縁 (ボーダー) を表示するリソース (.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:
ても役に立ちません。