トップ回答者
System.Drawing.Image をWPFのImageで表示することは可能でしょうか?

質問
-
元になる画像ファイルは存在せず、戻り値としてSystem.Drawing.Image型の値を返すメソッドがあり、その戻り値を画像として表示したいと思っています。
WPFでなく、Formsの場合であれば、
pictureBox.Image = そのメソッド(); pictureBox.Update();
だけで終わる話なのですが。
これと同じことを、WPFのImageを使って行なおうとしたところ、System.Drawing.Image型を直接Sourceに指定できず困ってしまいました。
ファイルとして元画像が存在するならそのURIを指定する方法で済むのですが、ファイルとしては存在せず、あくまでこのメソッドの戻り値としてだけ存在するものです。
System.Drawing.Image型の戻り値から、直接、Imageで表示する方法はないでしょうか?
回答
-
そのSystem.Drawing.Imageオブジェクトの実体が確実にSystem.Drawing.Bitmap型であるなら、System.Drawing.BitmapにキャストしてLockBitsしてSystem.Windows.Media.Imaging.BitmapSource.Createを使う、といった辺りで対応できますかね。
System.Drawing.Imaging.Metafileの可能性もあるとするなら、一旦新しいSystem.Drawing.Bitmapを作ってそれに対し取得したImageをGraphics.DrawImageして、Bitmap.SaveでMemoryStreamに保存してBitmapDecoderやBitmapImageを使ってロード、ってなことになるかしら。
// Update()は不要ですよ、ImageがセットされたらPictureBoxは自動的に再描画を行います。
- 回答としてマーク minami259 2012年6月20日 1:56
すべての返信
-
そのSystem.Drawing.Imageオブジェクトの実体が確実にSystem.Drawing.Bitmap型であるなら、System.Drawing.BitmapにキャストしてLockBitsしてSystem.Windows.Media.Imaging.BitmapSource.Createを使う、といった辺りで対応できますかね。
System.Drawing.Imaging.Metafileの可能性もあるとするなら、一旦新しいSystem.Drawing.Bitmapを作ってそれに対し取得したImageをGraphics.DrawImageして、Bitmap.SaveでMemoryStreamに保存してBitmapDecoderやBitmapImageを使ってロード、ってなことになるかしら。
// Update()は不要ですよ、ImageがセットされたらPictureBoxは自動的に再描画を行います。
- 回答としてマーク minami259 2012年6月20日 1:56
-
直接は無理ですがImaging.CreateBitmapSourceFromHBitmap()メソッドとBitmap.GetHbitmap()メソッドの組み合わせではどうでしょうか?