【问题标题】:Is it possible to tell a Windows 8.1 app not to scale up specific elements?是否可以告诉 Windows 8.1 应用不要放大特定元素?
【发布时间】: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


【解决方案1】:

尝试将sizing grip属性设为false

【讨论】:

  • xaml 中的尺寸控制是什么?你能扩展一下吗?有msdn的链接吗?你认为这会如何工作?
猜你喜欢
  • 2010-11-05
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 2015-05-14
相关资源
最近更新 更多