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

通常、あなたが望む:

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

この値は、親コントロール内に完全に収まりながら、可能な限り画像を拡大します。歪ませず、ソースの縦横比を維持します。使用する場合

Stretch="None"

画像(または画像に適合するもの、クリップ)をネイティブサイズで表示しますが、これは常に必要なサイズではありません。

とにかく、いくつかの選択肢がありますが、Stretch を希望する値に設定すると、画像が伸びるかどうかに影響します。

于 2012-06-05T18:02:26.273 に答える
2

XAML で、"Stretch" プロパティを "None" に設定します (デフォルトで "Fill" になっていると思います)。

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

必要に応じて、Width プロパティと Height プロパティを明示的に設定することもできます。

于 2012-06-05T16:48:57.067 に答える
0

WPF は (少なくとも表面では) ピクセル単位で表示しません。WPF は、デバイスに依存しない単位、具体的には 1/96 インチで物事を表示します。

画像ファイルのメタデータには DPI/解像度情報が含まれており、コンピューターにその画像の大きさをインチ単位で伝えます。画像ファイルが幅 8 インチになるようにプログラムされている場合、画像のピクセル数に関係なく、WPF では 768 ユニットに等しくなります。

Photoshop または同等の画像編集プログラムを使用して、画像の DPI を変更したり、WPF で表示するときに幅と高さを明示的に指定したりできます。

于 2012-06-05T16:38:35.297 に答える