我是学习 SwiftUI 的初学者
我有一个简单的蓝色位图文件导入到资产中。这是一个 150x150 像素的 bmp 文件
我通过以下方式创建 UIImage:
let data = NSDataAsset(name: "BitmapBlue150")!.data
let uiImage = UIImage(data: data)!
然后在我看来,位图显示为
Image(uiImage: uiImage)
当我检查 uiImage.scale 时,它显示scale = 1
但是,在我看来,显示的图像是150x150点,而不是像素
图像视图是否自动缩放图像?如果是的话,那么比例因子不应该是 1,对吗?
感谢您的见解
您误解了
scale
的工作原理。图像的 scale
是您乘以的因子,以将点转换为像素。
如果从名称包含 @2x 修饰符的文件加载图像,则比例将设置为 2.0。当从 Core Graphics 图像初始化图像时,您还可以指定显式比例因子。假设所有其他图像的比例因子为 1.0。
如果将图像的逻辑大小(存储在
属性中)乘以该属性中的值,则会得到图像的尺寸(以像素为单位)。size
因此,比例为 1.0 意味着图像中的一个像素对应于一个点,是的,iOS 将会 根据设备屏幕的比例自动调整图像大小。由于图像的一个像素对应一个点,因此如果您在 iPhone 15 Pro Max 上显示图像,图像将会放大 3 倍(scale=3,即每点三个像素)。
你的图像的比例是1.0,只是因为你在创建图像时没有指定
scale:
。您传递给 Data
的 init(data:)
没有比例,因此假设比例为 1.0。例如,如果您这样做UIImage(data: data, scale: 2.0)
,您可以自己设置比例。
如果您使用图像集而不是数据集,您可以通过将它们放入相应的插槽中来设置图像的比例:
系统将根据设备选择适当版本的图像。