你可以向应用添加图像和其他文件资源,并从应用内引用这些文件。 如果按照以下在文件夹中命名和组织文件资源的说明操作,则内置了对基于高对比度设置或显示缩放来交换图像的支持。
说明
- 为不同比例 (dpi) 和对比度设置创建定制的图像或其他文件资产。
创建多个具有推荐大小的图像,确保你的应用在 Windows 进行缩放时具有良好的外观。请参阅按比例缩放像素密度指南。
-
为每个图像创建多个副本:
-
使用针对各种比例和对比度设置的限定符来命名图像:
- name.scale-100.ext
- name.scale-140.ext
- name.scale-180.ext
- name.scale-80.ext(适用于徽标、宽徽标和小徽标资源)
- name.scale-100_contrast-black.ext
- name.scale-100_contrast-white.ext
在此示例中,name.ext 是代码和标记中引用的图像名称。
-
将图像并排放在同一个文件夹中。例如:
- images/logo.scale-100.png
- images/logo.scale-140.png
- images/logo.scale-180.png
- images/logo.scale-80.png
- images/logo.scale-100_contrast-black.png
- images/logo.scale-100_contrast-white.png
-
- 在 XAML 中不使用限定符引用图像。
<Image Source="images/logo.png" />
- 在代码中不使用限定符引用图像。
var uri = new System.Uri("ms-appx:///images/logo.png"); var file = Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(uri);
- 在清单中不使用限定符引用图像。
- 在 Microsoft Visual Studio 中打开 Package.appxmanifest 文件。
- 编辑清单引用,在正确的元素或属性中引用该文件,例如:
Logo: images\logo.png
可能需要本地化一些图像或其他文件,特别是在它们包含文本或文化敏感的材料时。如果用户所在地点的语言与其所用的语言不同,文件也可能不同。例如,根据用户的位置,地图可能具有不同的边界,但标签应该与用户的首选语言保持一致。
可使用针对不同用户和设备配置的基本文件夹和文件命名约定来标记或限定各种文件。请参阅如何使用限定符命名资源,了解限定资源的详细信息和一组限定符。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Windows 对你的应用进行缩放,确保无论设备的像素密度如何,UI 元素的物理尺寸都保持一致。本主题概述如何构建在缩放时保持布局和图像的外观良好的应用。
缩放的用户体验指南
如果没有缩放,当显示设备的像素密度增加时,屏幕上对象的物理尺寸会缩小。当 UI 太小而无法操作以及当文本太小而无法阅读时,Windows 会将系统和应用 UI 缩放到一个缩放百分比:
- 不应用缩放时为 100%
- 140%,适用于最低 DPI 为 174 的 1920 x 1080 设备
- 180%,适用于最低 DPI 为 240 的 2560 x 1440 设备
注意 对于清单中指定的徽标和 WideLogo 图像,可以指定其他 80% 缩放百分比。若要获得最佳结果,请提供这些图像的四个缩放。
你无须对应用执行任何操作即可达到缩放效果,但是你需要遵循本主题中指南,才能确保应用在缩放时达到良好的外观效果。
正确做法 | 使用可缩放的向量图为 Javascript 应用使用可缩放的向量图 (SVG),为 C#/C++/VB 应用使用可扩展应用程序标记语言 (XAML)。Windows 可自动为你缩放这些格式,不会产生明显的痕迹。 |
---|---|
对应用程序包中的位图使用资源加载 对于应用程序包中存储的位图图像,请为每个缩放(100%、140% 以及 180%)提供单独的图像,然后使用下面介绍的"缩放"命名约定为图像文件命名。Windows 自动为当前缩放加载正确的图像。 使用文件名或文件夹命名约定保存多个版本的图像。 Option #1 - File naming convention: ...\test.scale-100.jpg \test.scale-140.jpg \test.scale-180.jpg Option #2 - Folder naming convention: ...\scale-100\test.jpg \scale-140\test.jpg \scale-180\test.jpg 在标记中,指定未使用命名约定的图像。 |
|
针对远程 Web 图像使用分辨率媒体查询如果你的应用程序是 JavaScript 应用,并且其中包含远程 Web 图像,请使用具有背景图像的级联样式表 (CSS) @media min-resolution 媒体查询,在运行时替换图像。
/* CSS - Load a remote image depending on the scale percentage */ @media all and (max-resolution: 134dpi){ /* Load 100% image when scaled by 100% */ .imageBackground { background-image: url('http://www.fabrikam.com/foo.png?s=100'); } } @media all and (min-resolution: 135dpi) { /* Load 140% image when scaled by 140% */ .imageBackground { background-image: url('http://www.fabrikam.com/foo.png?s=140'); } } @media all and (min-resolution: 174dpi) { /* Load 180% image when scaled by 180% */ .imageBackground { background-image: url('http://www.fabrikam.com/foo.png?s=180'); } } 对于使用 C++、C# 或 Visual Basic 为 Windows 构建的 Windows 应用商店应用,且该应用使用远程 Web 图像,你必须查询 <Image Grid.Row="0" Grid.Column="2" x:Name="testRemoteWebImage" Margin="2,2,2,2"/> // Manually load different versions of the image based on the scaling factors. void LoadRemoteWebImage() { switch (DisplayProperties.ResolutionScale) { case ResolutionScale.Scale100Percent: testRemoteWebImage.Source = new BitmapImage(new Uri(testRemoteWebImage.BaseUri, "http://www.fabrikam.com/foo.png?s=100")); break; case ResolutionScale.Scale140Percent: testRemoteWebImage.Source = new BitmapImage(new Uri(testRemoteWebImage.BaseUri, "http://www.fabrikam.com/foo.png?s=140 ")); break; case ResolutionScale.Scale180Percent: testRemoteWebImage.Source = new BitmapImage(new Uri(testRemoteWebImage.BaseUri, "http://www.fabrikam.com/foo.png?s=180 ")); break; default: throw new Exception("Unknown Scaling Factor"); } } |
|
针对文件系统上的用户图像使用文件访问缩略图 API 如果你的应用从文件系统加载用户图像,则应使用文件访问缩略图 API,以便自动检索文件系统上与当前缩放对应的缩略图。 | |
根据运行时的缩放百分比手动加载图像 如果你的应用在运行时使用代码加载图像,请使用 Windows 运行时 API 来确定缩放并根据缩放百分比手动加载图像。 | |
指定图像的宽度和高度 你应该确保指定图像的宽度和高度,而不是针对图像使用大小自动调整功能,从而防止在加载更大的图像时改变布局。 | |
使用版式网格单位和子单位 如果可能,你应该使用对主网格单位使用版式网格定义的 20px 大小,而对副网格单位使用 5px 大小,从而确保布局不会因像素舍入而出现像素偏移。任何可被 5px 整除的大小单位不会产生像素舍入。 |
开发人员应避免出现以下情况。
禁止事项 | 请勿使用按比例放大的过小图像 因为在默认情况下,图像会进行缩放,如果在高清屏幕上将仅提供 100% 缩放比例的图像放大到 140%,则会变模糊。你应该遵循上述指导,确保图像在 140% 的高缩放比率下保持良好的外观。 |
---|---|
请勿使用按比例缩小的过大图像在标准屏幕上,过大的图像缩小后会产生缩放痕迹和锯齿边。照片是唯一的例外情况,在缩小时可保持良好的外观。应该遵循上述指导,确保图像在 100% 的高缩放比率下保持良好的外观。 | |
避免指定非 5px 倍数的大小 如果单位不是 5px 的倍数,则当放大到 140% 和 180% 时会产生像素偏移。。 |