图像宽高比

时间:2013-05-20 16:07:24

标签: image silverlight grid windows-phone-8

我的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;
            }
        }
}

3 个答案:

答案 0 :(得分:0)

也许我在你的问题中遗漏了一些内容,但Stretch控件的Image依赖属性是否适用于你?您可以选择4种拉伸变体:FillNoneUniformUniformToFill。我想其中一些应该适合你。

答案 1 :(得分:0)

正如@haspermulator所说,你可以在Image控件上使用Stretch属性。

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

统一 UniformToFill 设置都保持原始图像宽高比。

来自the MSDN docs

    • 内容保留原始大小。
  • 填充
    • 调整内容大小以填充目标维度。不保留纵横比。
  • 统一
    • 调整内容的大小以适应目标维度,同时保留其原始宽高比。
  • UniformToFill
    • 调整内容的大小以填充目标维度,同时保留其原始宽高比。如果目标矩形的宽高比与源不同,则剪切源内容以适合目标尺寸。

答案 2 :(得分:-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))

代替。

这会解决您的问题吗?