我的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;
}
}
}
答案 0 :(得分:0)
也许我在你的问题中遗漏了一些内容,但Stretch
控件的Image
依赖属性是否适用于你?您可以选择4种拉伸变体:Fill
,None
,Uniform
和UniformToFill
。我想其中一些应该适合你。
答案 1 :(得分:0)
正如@haspermulator所说,你可以在Image控件上使用Stretch属性。
<Image Source='logo.png'
Stretch='UniformToFill' />
统一或 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))
代替。
这会解决您的问题吗?