以多种分辨率提供图像的价值以及如何在XAML中描述它们



我正在将一个WP7应用移植到WP8上,非wvga屏幕上的图标变得模糊了。我希望应用程序有水晶般清晰的图标。我一直在阅读MSDN上的多分辨率指南,以获得这样做的指导,但我还不完全清楚。

  • 建议只提供WXGA资产。是否有任何价值在为每个分辨率提供图像(例如:logo.screen-wvga.png, -wxga.png, -720p.png)?生成每个分辨率对我来说相当容易,而且我不担心增加包的大小。我想知道如果操作系统不缩减资产规模,资产是否会有更高的质量(有时?)这不是用于需要填充屏幕区域的背景图像,而是用于整个应用程序中使用的徽标和中小型图标。

  • 假设我只制作一个WXGA版本的图标。在XAML中描述图像的正确方法是什么?如果WP7上WVGA屏幕的原始图像是37px * 36px,那么我通过将维度乘以1.6来生成WXGA;我的图片现在是59px * 58px(四舍五入)。如果我有<Image Source="MyWxgaIcon.png"/>并在WXGA模拟器上运行它,操作系统会将其放大1.6倍。看起来我需要指定原始的,预缩放图像的尺寸,就像这个<Image Soruce="MyWxgaIcon.png" Width="37" Height="36"/>。这似乎不自然,因为资产没有这些维度——这是预期的方式吗?

谢谢。

WP8多分辨率的工作方式是,你总是有480逻辑像素的宽度(和800或853.3像素的高度),所有元素都使用逻辑像素来描述。没有内置的方法来提供多分辨率资产。推荐的方法是提供高分辨率的资产,并让操作系统对其进行缩放。更复杂的解决方案需要一些代码。

参见http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj206974(v=vs.105).aspx

几天前我遇到了同样的困惑。《Windows Phone 8的多分辨率应用》一文并没有明确指出,如果只提供WXGA资源,我们如何让XAML正确显示图像。我通过以下2个教程找到了解决方案:

http://www.silverlightshow.net/items/Windows-Phone-8-Multiple-Screen-Resolutions.aspxhttp://msdn.microsoft.com/en-us/library/aa970269.aspx

结果是你不需要显式地声明Height:

<Image Source="MyWxgaIcon.png" Width="37" />

然而,当你在WVGA设备上运行应用程序时,这种方式应该消耗更多的内存。在这种情况下,图像被按比例缩小以显示,但实际像素大小仍然保持不变。

所以更优化的方法是:

<Image Width="37">
    <Image.Source>
        <BitmapImage DecodePixelWidth="37" UriSource="MyWxgaIcon.png" />
    </Image.Source>
</Image>

最新更新