【发布时间】:2014-04-09 13:10:51
【问题描述】:
我正在为我的应用中的图像元素的源属性引用外部图像 URL。
我有 100、140 和 180 比例的 3 个版本的图像,例如
myimage.scale-100.jpg
myimage.scale-140.jpg
myimage.scale-180.jpg
如果图像存在于应用程序中,您通常会像下面这样放置源,Windows 会根据设备的分辨率比例确定要加载的图像:
ms-appx:///Assets/Images/myimage.jpg
但是,由于我的 3 张图像位于外部,我必须计算出分辨率比例,然后构建正确的源字符串,以便加载正确的图像,例如:
http://www.mywebsite.com/myimage.scale-180.jpg
这可行,但是,Windows 正在拍摄我的图像,例如180 缩放一个 myimage.scale-180.jpg,然后将其再放大 180%,它不知道我已经以正确的 180% 比例加载了图像并且它不需要缩放加油!
有没有办法告诉它不要放大特定的图像元素?
更新(添加代码):
xaml 图像元素:
<Image Source="{Binding Image, Converter={StaticResource ImageToExternalImagePathConverter}}" HorizontalAlignment="Left" VerticalAlignment="Top" Stretch="None" />
图像元素上用于确定外部图像路径的转换器(它计算出比例并使用绑定来构建正确的字符串)。
public object Convert(object value, Type targetType, object parameter, string language)
{
ResolutionScale resolutionScale = Windows.Graphics.Display.DisplayInformation.GetForCurrentView().ResolutionScale;
string ImageScale = ".scale-100";
switch (resolutionScale)
{
case ResolutionScale.Scale140Percent:
ImageScale = ".scale-140";
break;
case ResolutionScale.Scale180Percent:
ImageScale = ".scale-180";
break;
}
//builds up the correct string e.g. http://www.mywebsite.com/myimage.scale-180.jpg
string externalPath = "http://www.mywebsite.com/" + (string)value + ImageScale + ".jpg";
return externalPath;
}
更新(添加参考):
要进一步解释我目前在做什么,请参阅此链接: http://msdn.microsoft.com/en-us/library/windows/apps/hh465362.aspx
在运行时根据比例百分比手动加载图像如果您 应用程序在运行时使用代码加载图像,例如,如果您使用 DirectX 直接,而不是 XAML 或 HTML 来创建你的 UI,使用 DisplayProperties.ResolutionScale 属性确定比例和 根据比例百分比手动加载图像。
这就是我正在做的事情,但问题是 Windows 正在将 UI 放大到 140% 或 180%,这包括我手动加载的图像。因此,如果我手动加载一个已经大小为 140% 的图像,它无论如何都会被 Windows 放大,并且它确实会变得更大。如果图像存在于应用程序包中,则不会存在此问题,因为 Windows 识别文件名标识符并且不会放大它们(见下文)
对应用包中的位图图像使用资源加载 存储在应用程序包中的图像,为每个应用程序提供单独的图像 缩放因子(100%、140% 和 180%),并使用 下面描述的“比例”命名约定。 Windows 加载正确 自动显示当前比例的图像。
我如何从 Windows 中为应用程序包中的图像复制相同的行为,但对于应用程序外部并手动加载的图像?逻辑上在我加载(代码)中的图像,我想对Windows说,这个图像已经正确缩放了,不要按分辨率因子放大它。
【问题讨论】:
-
如果您使用自动大小的图像,它们将根据其
Stretch属性进行缩放,因此请确保您已设置。否则,它不应该使图像在屏幕上“物理”变大。它通常只识别它们何时被绘制得更大(例如通过“轻松访问”)并使用更高分辨率的图像。 -
如果你可以添加一个额外的图像,你可以添加
myimage.noscale.jpg,然后直接引用它。 -
@NateDiamond 您能否详细说明为什么以及如何解决我的问题?
-
为什么不获取屏幕分辨率并根据分辨率放置所需的图像。
-
@MuhammadUmar 我这样做了。但随后 Windows 将其进一步扩展 - 它们是外部托管的图像,它们并不存在于应用程序中。
标签: xaml windows-store-apps windows-8.1 image-scaling