0

我正在尝试在初始屏幕上显示图像,并且它在显示时被拉伸。我要显示的图像是一个简单的 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;
}
4

3 回答 3

2

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

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

如果您愿意,还可以显式设置 Width 和 Height 属性。

于 2012-06-05T16:48:57.067 回答
2

通常你想要:

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

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

Stretch="None"

它将以其原始大小显示图像(或图像的适合大小,它将被剪辑),这并不总是您想要的。

无论如何,您有一些选择,但将 Stretch 设置为您想要的会影响图像拉伸与否的方式。

于 2012-06-05T18:02:26.273 回答
0

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

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

您可以使用 Photoshop 之类的图像编辑程序或等效程序来更改图像的 DPI,或者在 WPF 中显示图像时为其指定明确的宽度和高度。

于 2012-06-05T16:38:35.297 回答