none
System.Drawing.Image をWPFのImageで表示することは可能でしょうか? RRS feed

  • 質問

  • 元になる画像ファイルは存在せず、戻り値としてSystem.Drawing.Image型の値を返すメソッドがあり、その戻り値を画像として表示したいと思っています。

    WPFでなく、Formsの場合であれば、

    pictureBox.Image = そのメソッド();
    pictureBox.Update();
    
    

    だけで終わる話なのですが。

    これと同じことを、WPFのImageを使って行なおうとしたところ、System.Drawing.Image型を直接Sourceに指定できず困ってしまいました。

    ファイルとして元画像が存在するならそのURIを指定する方法で済むのですが、ファイルとしては存在せず、あくまでこのメソッドの戻り値としてだけ存在するものです。

    System.Drawing.Image型の戻り値から、直接、Imageで表示する方法はないでしょうか?

    2012年6月20日 0:59

回答

  • その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
    2012年6月20日 1:27

すべての返信

  • その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
    2012年6月20日 1:27
  • 回答ありがとうございます。

    実は、使用する予定だったメソッドが、戻り値の問題と別に、元データによってはうまく変換できない場合があることがわかり、この部分から別の手段を検討することになりました。

    また別の機会に同様の問題が発生した時は参考にさせて頂きます。

    2012年6月20日 1:56
  • 直接は無理ですがImaging.CreateBitmapSourceFromHBitmap()メソッドBitmap.GetHbitmap()メソッドの組み合わせではどうでしょうか?
    2012年6月20日 2:04