我有一个函数,它接收一个UIImage和一个颜色,并使用该颜色返回一个UIImage。
在该函数的一部分中,UIImage被转换为CGImage,但由于某种原因,CGImage的大小是UIImage的3倍,这意味着最终结果是应有大小的3倍。
以下是该函数:
func coloredImageNamed(name: String, color: UIColor) -> UIImage {
let startImage: UIImage = UIImage(named: name)!
print("UIImage W: \(startImage.size.width) H\(startImage.size.height)")
let maskImage: CGImage = startImage.CGImage!
print("CGImage W: \(CGImageGetWidth(maskImage)) H\(CGImageGetHeight(maskImage))")
// Make the image that the mask is applied to (Just a rectangle of the color want to use)
let colorImageSize: CGSize = CGSizeMake(startImage.size.width, startImage.size.height)
let colorFillImage: CGImage = getImageWithColor(color, size: colorImageSize).CGImage!
// Make the mask image into a mask
let mask: CGImage = CGImageMaskCreate(CGImageGetWidth(maskImage),
CGImageGetHeight(maskImage),
CGImageGetBitsPerComponent(maskImage),
CGImageGetBitsPerPixel(maskImage),
CGImageGetBytesPerRow(maskImage),
CGImageGetDataProvider(maskImage), nil, false)!
// Create the new image and convert back to UIImage, then return
let masked: CGImage! = CGImageCreateWithMask(colorFillImage, mask);
let returnImage: UIImage! = UIImage(CGImage: masked)
return returnImage
}
您可以在前几行中看到,我使用print()将每个UIImage和CGImage的大小打印到控制台。CGImage始终是UIImage的3倍大小... 我怀疑这与@2x、@3x等有关吗?
所以问题是为什么会发生这种情况,我该怎么做才能得到一个与我开始时相同大小的图像?