为什么我的图像显示得更大?

时间:2012-06-05 16:23:16

标签: c# wpf image imagesource

我正试图在启动画面上显示图像,并在显示时进行拉伸。我试图显示的图像是一个简单的bmp文件。有什么想法吗?

在SplashWindow.xaml中:

<Window ... SizeToContent="WidthAndHeight">
  <Grid>
    ...
    <Image Grid.Row="0" Source="{Binding SplashImage}"></Image>
  </Grid>
</Window>

在SplashViewModel.cs

public ImageSource SplashImage
{
  get
  {
    return ImageUtilities.GetImageSource(_splashImageFilenameString);
  }
}

来自ImageUtilities.cs

public static ImageSource GetImageSource(string imageFilename)
{
  BitmapFrame bitmapFrame = null;

  if(!string.IsNullOrEmpty(imageFilename))
  {
    if(File.Exists(imageFilename))
    {
      bitmapFrame = BitmapFrame.Create(new Uri(imageFilename));
    }
    else
    {
      Debug.Assert(false, "File " + imageFilename + " does not exist.");
    }
  }
  return bitmapFrame;
}

3 个答案:

答案 0 :(得分:2)

在你的XAML中,将“Stretch”属性设置为“None”(我相信它默认为“Fill”):

<Image Grid.Row="0" Source="{Binding SplashImage}" Stretch="None"></Image>

如果您愿意,也可以显式设置“宽度”和“高度”属性。

答案 1 :(得分:2)

通常你想要:

<Image Source="{Binding ImagePath}" Stretch="Uniform" />

此值将尽可能放大图像,同时仍完全适合您的父控件。它不会扭曲它,它将保持源的纵横比。如果你使用

Stretch="None"

它将显示图像(或图像的适合度,它将剪辑)其原始尺寸,这并不总是您想要的。

无论如何,你有一些选择,但将Stretch设置为你想要的效果会影响图像的伸展方式。

答案 2 :(得分:0)

WPF不以像素显示内容(至少不在表面上)。 WPF以与设备无关的单位显示内容,特别是1/96英寸。

图像文件的元数据中包含DPI /分辨率信息,告诉计算机该图像的大小以英寸为单位。如果你的图像文件被编程为说它是8英寸宽,那么无论图像有多少像素,它都将等于WPF中的768个单位。

您可以使用Photoshop等图像编辑程序来更改图像的DPI,或者在WPF中显示时,只需给它一个明确的宽度和高度。