//WindowsBase, WindowsFormsIntegration, PresentationCore, PresentationFramework を参照に追加する using System.IO; using System.Windows.Forms.Integration; //ElementHost using System.Windows.Controls; //Image using System.Windows.Media; //Stretch using System.Windows.Media.Imaging; //BitmapImage,BitmapCacheOption namespace FormPicboxAndWpfImgTest { //直感的に分かりやすい名前への読み替え enum EQuality { High = BitmapScalingMode.Fant, //InterpolationMode.HighQualityBilinear と同等の画質 Normal = BitmapScalingMode.Linear, //InterpolationMode.Bilinear と同等の画質 Low = BitmapScalingMode.NearestNeighbor //InterpolationMode.NearestNeighbor と同等の画質 } //WPFのImageコントロールをホストするElementHost //・フォームデザインで配置するなら、コンストラクタの呼び出しは不要。代わりにCreateImageControl()を呼び出す。 //・フォームデザインで配置しないなら、コンストラクタからCreateImageControl()を呼び出せばよい。 class WpfImageHost : ElementHost { public Image Image { get { return (this.Child as Image); } } //コンストラクタ public WpfImageHost() : base() { //CreateImageControl(); } //Imageを作成し、ElementHostにセットする public void CreateImageControl() { Image img = new Image(); this.Child = img; img.Stretch = Stretch.Uniform; //縦横比を保ってImageがElementHostにフィットする RenderOptions.SetBitmapScalingMode(img, (BitmapScalingMode)EQuality.High); } //BitmapImageを作成し、Imageにセットする //・引数はFileStream,MemoryStreamを想定。 public bool SetBitmapImage(Stream stream) { BitmapImage bmp = new BitmapImage(); try { bmp.BeginInit(); bmp.StreamSource = stream; bmp.CacheOption = BitmapCacheOption.OnLoad; bmp.CreateOptions = BitmapCreateOptions.IgnoreColorProfile; bmp.EndInit(); } catch { bmp = null; return false; } if (bmp.CanFreeze) bmp.Freeze(); Image.Source = bmp; return true; } } //class } //namespace