拉伸图像以填充可用的宽度/高度(单独)

时间:2013-08-15 09:57:36

标签: c# wpf image

用xaml中的图像填充可用宽度/高度是否有办法? 我需要像UniformToFill这样的东西,但我可以控制拉伸方向(宽度或高度)

假设我有以下代码:

<UniformGrid Columns="2" Rows="2">        
    <Image Source="Desert1.jpg" Stretch="Uniform"/> //
    <Image Source="Desert2.jpg" Stretch="UniformToFill"/> // 
    <Image Source="Desert3.jpg" />
    <Image Source="Desert4.jpg" />
</UniformGrid>

修改 for examle(width):如果图像宽度是我要显示的一半,我不关心高度,只是缩放x2图像的高度和宽度。因此图像必须适合宽度,而不关心高度。这是理想的行为,但如果不可能 - 好吧。所以你可以重新考虑问题,如果可能,我怎么能在xaml中做到。

此外,所有图像的宽度和高度可能不同

3 个答案:

答案 0 :(得分:3)

我认为你可能能够在某些条件下获得你想要的效果。如果您的图片都大于它们将显示的尺寸,您可以可能使用此图片:

<Image Source="Desert.jpg" Stretch="UniformToFill" StretchDirection="DownOnly" />

ViewBox具有与Stretch相同的Image属性,并且在MSDN上How to: Apply Stretch Properties to the Contents of a Viewbox文章中的不同组合之间存在差异的良好示例。< / p>

答案 1 :(得分:2)

这可能就是你要找的......

TransformedBitmap

这是我在ImageUtility类中创建的静态方法。

public static TransformedBitmap GetScaledBitmapImageSprite(BitmapSource src, double x_scale, double y_scale)
{
  return (new TransformedBitmap(src, new ScaleTransform(x_scale, y_scale)));
{

x_scale和y_scale是以下形式的双打:

desired_width / original_width

可能与您正在寻找的有点不同,但我认为它可以让您开始走上正轨。

您可以将TransformedBitmap存储在内存中并通过以下方式应用新的转换:

TransformedBitmap x = new TransformedBitmap();
x.Transform = new ScaleTransform(x,y);

答案 2 :(得分:1)

你应该使用

<Image Source="{Binding Image}" Stretch="Fill"/>

就像你使用Stretch =&#34; UnifrmtoFill&#34;然后它会以一个比例改变长度和宽度,或者我说两者在一起。

所以,如果你使用 拉伸=&#34;填充&#34;,它可以让你随时改变高度或宽度。