コードXAMLファイル
<ウィンドウX:クラス= "ImageShowDemo.MainWindow" のxmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" のxmlns:X =「http://schemas.microsoft.com/winfx/2006 / XAML " のxmlns:S ="ネームスペースでCLR:システム; = mscorlibアセンブリ" タイトル="メインウィンドウ"高さ=" 350 "幅=" 525 "> <Window.Resources> <S:ブールX:キー="真" >真</ S:ブール> <S:ブールX-:キー偽> = "偽" </ S:ブール> </Window.Resources> <! -のみImageコントロールの上にマウスをトリガーするイベントマウスホイールnullにGrid.Backgroundデフォルトので、 背景セットがnullでない、グリッドマウスホイールの範囲でイベントをトリガする- > <グリッド=マウスホイール"Grid_MouseWheel」背景= "透明"> <Grid.RowDefinitions> < "* 9" RowDefinition身長= /> <RowDefinition高さ= "*" /> </Grid.RowDefinitions> < - -いいえ、背景画像のプロパティ!> <画像X:名= "画像" WIDTH = "オート" =高「オート」ソース=「{}結合緩衝液」たHorizontalAlignment =「センター」VerticalAlignmentを=「センター」/> <= Grid.Rowボーダー」1" =たHorizontalAlignment 『ストレッチ』 VerticalAlignmentを= 『ストレッチ』 BorderBrush = 『ブルー』 BorderThickness =」1" > <= TextBlockのテキスト『テストテストテストテストテストテストテストテストテストテストテスト』たHorizontalAlignment = 『センター』 VerticalAlignmentを= 『センター』 /> </ボーダー> </グリッド> </窓>
ファイルのコードを対応するXmal.cs:
Microsoft.Win32を使用しました。 システムを使用しました。 System.Collections.Genericを使用しました。 System.IOを使用しました。 System.Linqのを使用しました。 System.Textのを使用しました。 System.Threading.Tasksを使用しました。 System.Windowsを使用しました。 System.Windows.Controlsを使用しました。 System.Windows.Dataを使用しました。 System.Windows.Documentsを使用しました。 System.Windows.Inputを使用しました。 System.Windows.Mediaを使用しました。 System.Windows.Media.Imagingを使用しました。 System.Windows.Navigationを使用しました。 System.Windows.Shapesを使用しました。 名前空間ImageShowDemo { /// <要約> /// MainWindow.xaml的交互逻辑 /// </要約> 公共部分クラスのメインウィンドウ:ウィンドウ { 公共のバイト[]バッファと パブリックメインウィンドウ() { のInitializeComponent(); OpenFileDialogダイアログ=新しいOpenFileDialog(){フィルター= String.Formatの( "{0} | *。JPG、*。PNG; * JPEG"、 "图片文件")}。 IF((BOOL)dialog.ShowDialog()) { バッファー= FileToByteArray(dialog.FileName)。 this.image.Source = ByteArrayToBitmapImage(バッファ) } } #region WPFイメージ控件ソース、バイト[]、BitmapImageの相互转换 /// <要約> ///文件转换为バイト[] /// </要約> /// <PARAM NAME = "FILENAME"> < / param>の /// <戻る> </戻り> プライベートバイト[] FileToByteArray(ストリングファイルパス) { のFileStream FS =新規のFileStream(filePathに、FileMode.Open、FileAccess.Read)。 試す { バイト[]バッファ=新しいバイト[fs.Length]。 fs.Read(バッファ、0、(INT)fs.Length)。 バッファを返します。 } キャッチ(例外例) { Console.WriteLineを(ex.Message)。 ヌルを返します。 } 最後に { IF(!FS = NULL) fs.Close(); } } /// <要約> ///バイト[]转换为のBitmapImage /// </要約> /// <PARAM NAME = "BYTEARRAY"> </ PARAM> /// <戻る> </戻り> プライベートのBitmapImage ByteArrayToBitmapImage(バイト[] BYTEARRAY) { BitmapImageのBMP = NULL; 試す { BMP =新しいBitmapImageのを(); bmp.BeginInit(); bmp.StreamSource =新しいのMemoryStream(BYTEARRAY)。 bmp.EndInit(); } キャッチ(例外例) { Console.WriteLineを(ex.Message)。 BMP = NULL; } BMPを返します。 } /// <まとめ> /// BitmapImageのバイトに変換[] /// </要約> /// <PARAM NAME = "BMP"> </ PARAM> /// </ <返し>戻り値> プライベートバイト[] BitmapImageToByteArray(BitmapImageのBMP) { バイト[] = ByteArrayのヌル; ストリームsMarket = bmp.StreamSource; 試し { IF(!= nullの&& sMarket.Length sMarket> 0) { ポジションの最後に//ストリーム、 0手動で0に、またはリード長さ以下に設定する必要が sMarket.Position = 0。 (BinaryReader BinaryReader BR =新しい新しい(sMarket))を使用して { br.ReadBytes =((INT)sMarket.Length)をBYTEARRAY; } } } キャッチ(例外EX) { Console.WriteLineを(ex.Message); } 最後に { sMarket.Close( ); } BYTEARRAYザを返す; } #endregion /// <まとめ> ///マウスホイールによって表示される画像をズーム /// </要約> /// <PARAM NAME = "SENDER"> </ PARAM> /// <PARAM NAME = "E"> </ PARAM> プライベートボイドGrid_MouseWheel(オブジェクト送信者、MouseWheelEventArgs E) { 行列M = image.RenderTransform.Value。 点p =新しいポイント(image.ActualWidth / 2、image.ActualHeight / 2)。 (e.Delta> 0)であれば { m.ScaleAtPrepend(1.1、1.1、pXの、はpY)。 } 他 { m.ScaleAtPrepend(1 / 1.1、1 / 1.1、pXの、はpY)。 } image.RenderTransform =新しいMatrixTransform(M)。 } } }