C# 拉伸图像以填充可用的宽度/高度(单独)
是否可以用xaml中的图像填充可用的宽度/高度? 我需要像UniformToFill这样的东西,但我可以控制拉伸方向(宽度或高度) 假设我有以下代码:C# 拉伸图像以填充可用的宽度/高度(单独),c#,wpf,image,C#,Wpf,Image,是否可以用xaml中的图像填充可用的宽度/高度? 我需要像UniformToFill这样的东西,但我可以控制拉伸方向(宽度或高度) 假设我有以下代码: <UniformGrid Columns="2" Rows="2"> <Image Source="Desert1.jpg" Stretch="Uniform"/> // <Image Source="Desert2.jpg" Stretch="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>
//
//
编辑:
例如(宽度):若图像的宽度是我想要显示的宽度的一半,我不关心高度,只缩放x2图像的高度和宽度。所以图像必须适合宽度,而不关心高度。这是期望的行为,但如果不可能的话-好的。所以你们可以重新思考这个问题,若可能的话,我怎样才能在xaml中做到这一点
此外,所有图像可能具有不同的宽度和高度这可能就是您要查找的
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_刻度和y_刻度是双刻度,形式如下:
所需宽度/原始宽度
也许与你所寻找的有点不同,但我认为它可以让你在正确的轨道上开始
您可以将转换位图存储在内存中,并通过以下方式应用新的转换:
TransformedBitmap x = new TransformedBitmap();
x.Transform = new ScaleTransform(x,y);
我认为在某些条件下,你可能会得到你想要的效果。如果您的图像都大于将显示的大小,您可以使用以下方法:
<Image Source="Desert.jpg" Stretch="UniformToFill" StretchDirection="DownOnly" />
视图框
与图像
具有相同的拉伸
属性,MSDN文章中有一个很好的例子说明了不同组合之间的差异。您应该使用
<Image Source="{Binding Image}" Stretch="Fill"/>
比如,如果您使用Stretch=“UnifrmtoFill”,那么它将以一定的比例改变长度和宽度,或者我将两者一起说
所以如果你使用
Stretch=“Fill”,无论发生什么变化,您都可以一次更改高度或宽度。您需要动态控制它吗?@KingKing是的,我需要界面中的复选框之类的东西来控制它,也可以接受“静态”解决方案,因此,我可以将xaml代码加倍并隐藏不必要的代码:D。但是动态地说,我真的不理解这里的问题。你是说如果你的图像是你想显示的一半宽,但是高度正确,你只想水平扩展它?这种行为对我来说毫无意义,因此如果是这样的话,也许你应该重新考虑你的目标。@ZombieSheep据我所知,他可能想拥有一些
属性
,以确定图像是应该在宽度
上拉伸还是在高度
上拉伸(当然是另一个(非拉伸)将统一格式,以便图像的宽度/高度与原始图像的宽度/高度相同)。我正在寻找基于XAML的解决方案,因为它使我不必获取父容器的高度、图片高度,然后计算代码中的缩放率。我已经看到了这些属性,但是一个他们可以工作的情况应该太具体了。此外,UniformToFill覆盖的此类情况超过了通常所需的高度或宽度。不幸的是,UniformToFill不允许设置所需的属性。如果您确实花时间将MSDN上链接页面中的示例代码放入新的测试WPF项目中,并使用上面列出的设置运行它,那么您将看到这确实提供了所需的结果。它工作的唯一条件是原始图像的大小大于显示的大小。尽管如此,如果这个条件不能满足,那么我承认这对你没有帮助。好吧,我写了这个代码,但仍然不明白。对于宽度和高度都较大的图片,使用UniformToFill看起来绝对像,但对于较小的图片,它根本不起作用。看起来我无法控制缩放时必须使用哪个属性。我确实说过,只有当你的图像比你显示的图像大时,它才会起作用。如果您选择DownOnly
,然后在Unifrom
和UniformToFill
设置之间切换,您将看到它通过降低高度和显示所需的全宽来工作。如果您想放大图像(例如,使用比显示的图像小的图像),那么请不要介意,祝您搜索好运。我在MSDN示例中仔细测试了更大的图片(和旋转版本)<代码>统一减少宽度和高度。对于UniformToFill
减少宽度或高度的最低值。而且,看起来我无法控制缩放必须使用哪个属性。