1

我的 silverlight windows phone 8 页面上有一个网格系统,单击按钮即可容纳许多图片。单元格的大小指定为 150x100。

我的问题是,如果原始图像尺寸为 1000x1500,它会在网格中被挤压,因为纵横比会有所不同。有没有办法处理这个,下面是我写的代码。请告诉我我必须对代码进行哪些更改。

注意:我正在使用比例变换并将 ScaleX 和 ScaleY 指定为 1。

public resizeImage(Image img)
{
     double originalHeight = 500;
     double originalWidth  = 1000;
     double originalAspectRatio = originalWidth / originalHeight;

      if (img.Width < originalWidth || img.Height < originalHeight)
      {
            // no change has to be done
            PageScale.ScaleX = 1.0;
            PageScale.ScaleY = 1.0;
      }
      else
        {
            // keeping aspect ratio the same
            if (img.Width / img.Height > originalAspectRatio)
            {
                // taking height into consideration
                PageScale.ScaleY = img.Height / originalHeight;
                PageScale.ScaleX = PageScale.ScaleY;
            }
            else
            {
                //taking width into consideration
                PageScale.ScaleX = img.Width / originalWidth;
                PageScale.ScaleY = PageScale.ScaleX;
            }
        }
}
4

3 回答 3

0

正如@haspermulator 所说,您可能只使用 Image 控件上的 Stretch 属性。

   <Image Source='logo.png'
           Stretch='UniformToFill' />

Uniform或UniformToFill设置保持原始图像纵横比。

来自MSDN 文档

  • 没有任何
    • 内容保留其原始大小。
  • 充满
    • 调整内容的大小以填充目标尺寸。不保留纵横比。
  • 制服
    • 内容会调整大小以适应目标尺寸,同时保留其原始纵横比。
  • 均匀填充
    • 内容会调整大小以填充目标尺寸,同时保留其原始纵横比。如果目标矩形的纵横比与源不同,则源内容将被剪裁以适应目标尺寸。
于 2013-05-21T21:24:36.190 回答
0

也许我在你的问题中遗漏了一些东西,但控件Stretch的依赖属性不适合你吗?Image您有 4 种拉伸变体可供选择:FillNone和。我想其中一些应该对你有用。UniformUniformToFill

于 2013-05-21T11:27:42.817 回答
-1

我想你可能想要

double originalHeight = 500;
double originalWidth  = 1000;

double originalHeight = 100;
double originalWidth  = 150;

反而。而对于

if (img.Width < originalWidth || img.Height < originalHeight)

if (!(img.Width > originalWidth) && !(img.Height > originalHeight))

反而。

这能解决你的问题吗?

于 2013-05-21T06:17:46.983 回答