WPF 標準コントロールデモアプリ › Image

Image Graphics

Image は URI、ファイルパス、アプリケーションリソースなどさまざまなソースから画像を表示するコントロールです。複数の画像フォーマットに対応し、コンテナに対する画像の拡大縮小方法を制御できます。

概要

WPF の Image コントロールは FrameworkElement を継承したシンプルな画像表示要素です。Source プロパティに BitmapImageDrawingImageRenderTargetBitmap などの ImageSource 派生クラスを設定して使用します。

XAML では Source に URI 文字列を設定するだけで、WPF が自動的に BitmapImage に変換します。アプリのリソースに埋め込んだ画像は /AssemblyName;component/Images/logo.png 形式の URI でアクセスできます。

Stretch プロパティで Image がコンテナに対してどのようにサイズ調整されるかを制御します。Uniform はアスペクト比を保ちながら収まるようにスケール、UniformToFill はアスペクト比を保ちながらコンテナを完全に埋めます(端がクリップされる場合あり)。

高 DPI 環境では、RenderOptions.BitmapScalingMode 添付プロパティで補間方法を制御します。HighQuality は滑らかな拡大縮小を提供し、NearestNeighbor はピクセルアート画像をシャープに表示します。

画面キャプチャ

image demo screen

デモしているプロパティ

以下のプロパティが WPF 標準コントロールデモアプリでインタラクティブにデモされています。

プロパティ設定値説明
SourceImageSource (URI / file path)表示する画像のソースを設定します。アプリケーションにリソースとして埋め込んだ画像は Pack URI 形式(例:pack://application:,,,/Images/logo.png)でアクセスします。大量の画像を扱う場合は BitmapImageCacheOption=OnLoad を指定してデコードを即時に行うと、ストリームを早期に解放できます。はまりやすいポイント:XAML でバインドに単純な文字列 URI を渡すとコンバーターが自動適用されて動作しますが、コードビハインドで直接 Image.Source = "path" と文字列を代入してもエラーになります。コードビハインドでは BitmapImageImageSourceConverter を使って変換してから設定してください。
StretchNone / Fill / Uniform / UniformToFill画像がコンテナに対してどのようにスケールされるかを設定します。Uniform はアスペクト比を保って収まるようにスケールしレターボックス(余白)が生じます。UniformToFill はアスペクト比を保ってコンテナを完全に埋め、はみ出した端がクリップされます。Fill はアスペクト比を無視して引き伸ばします。プロフィール写真やカバー画像は UniformToFill が自然な見た目になります。はまりやすいポイント:UniformToFill では端がクリップされていても画像全体がメモリに展開されるため、大きな画像ではメモリを無駄に消費します。
StretchDirectionUpOnly / DownOnly / Bothスケールの方向を制限します。UpOnly は拡大のみ許可(縮小しない)、DownOnly は縮小のみ許可(拡大しない)、Both は両方向にスケールします。アイコン画像が大きなコンテナで引き伸ばされてぼけないよう UpOnly は重要です。はまりやすいポイント:StretchDirection=UpOnlyStretch=Uniform を組み合わせた場合、小さな画像を大きなコンテナに入れても画像は自然サイズのまま拡大されません。アイコン用途では意図した動作ですが、写真表示では予期しない小さな表示になることがあります。

XAML 使用例

<!-- リソース画像 -->
<Image Source="/Images/logo.png" Stretch="Uniform"
       Width="200" Height="100" />

<!-- ViewModel からバインド -->
<Image Source="{Binding ThumbnailUri}" Stretch="UniformToFill"
       Width="120" Height="90" />

<!-- 高 DPI 向け品質設定 -->
<Image Source="/Icons/save.png" Stretch="None"
       RenderOptions.BitmapScalingMode="HighQuality" />

主な使用例

ヒントとベストプラクティス

関連コントロール

ソースコード

このデモ画面のソースコードは GitHub で公開しています。アプリ内の「コード表示」ボタンから各プロパティの実際の XAML を確認できます。

GitHub で Image のソースコードを見る →