2013-05-20 77 views
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; 
      } 
     } 
} 

回答

-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)) 

代替。

这是否解决您的问题?

0

也许我错过了你的问题中的某些东西,但不是StretchImage控件的依赖属性对你有用吗?您可以选择4种拉伸变体:Fill,None,UniformUniformToFill。我想其中一些应该适合你。

0

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

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

两者统一UniformToFill设置保持原始图像的纵横比。

the MSDN docs

    • 内容保留了其原有的大小。
  • 填充
    • 内容调整大小以填充目标维度。宽高比不会保留。
  • 统一
    • 的内容被调整大小以适合于目标尺寸而它保留其原始长宽比。
  • UniformToFill
    • 的内容被调整大小以填充目标尺寸而它保留其原始长宽比。如果目标矩形的宽高比与来源不同,则将剪辑源内容以适合目标维度。