gpt4 book ai didi

ios - 为什么我的 CGImage 是 UIImage 的大小的 3 倍

转载 作者:搜寻专家 更新时间:2023-11-01 06:19:52 24 4
gpt4 key购买 nike

我有一个函数,它接受一个 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 和 CGI​​mage 的大小打印到控制台。 CGImage 总是 UIImage 大小的 3 倍...我怀疑它与 @2x、@3x 等有关?

所以问题是为什么会发生这种情况,如何才能得到与我开始使用的图像大小相同的图像?

最佳答案

这是因为 UIImage 有一个 scale 属性。这介于像素 之间。因此,例如,从 180x180 pixel 图像创建的 UIImage,但 scale 为 3,将被自动视为具有 60x60 points .它将报告其大小为 60x60,并且在 3 像素对应 1 点的 3 倍分辨率屏幕上看起来也不错。而且,正如您猜对的那样,@3x 后缀,或 Assets 目录中的相应位置,告诉系统在 UIImage 形成它时将 scale 设为 3 .

但是 CGImage 没有这样的属性;它只是一个位图,图像的实际像素。因此,由 180x180 像素 图像创建的 UIImage 形成的 CGImage 也是 180x180

关于ios - 为什么我的 CGImage 是 UIImage 的大小的 3 倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35945493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com