2016-11-11 33 views
0

私はDirect2Dレンダリングターゲットを使用しています。タイプはID2D1Bitmapです。このビットマップをWPFウィンドウに表示する必要があります。このビットマップをImageコントロールにホストすることを考えていました。これを行うには、ID2D1BitmapオブジェクトをSystem::Windows::Media::ImageSourceオブジェクトに変換するか、後で読み込むことができるファイルにビットマップを保存することができます。ID2D1BitmapをImageSourceに変換する方法

Direct2D APIはAFAIKのソリューションを提供していないため、さまざまなアプローチを試みましたが、結果はありませんでした。

これを行う方法はありますか?

+0

これはおそらくあなたを助けることができます。 [BitmapをImageSourceに変換する](http://stackoverflow.com/questions/26260654/wpf-converting-bitmap-to-imagesource) – MSL

+0

これを見たことがありますか:https://github.com/Microsoft/WPFDXInterop私たちが演奏できるサンプルコードがありますか? –

+0

あなたは助けようとしている人に答えてみませんか? –

答えて

0

私がWPFとUWPアプリケーションで見つけたベストソリューションはSharpDXです。 SharpDX websiteを参照してください。

私は過去にD2DWrappersを使用しようとしましたが(see the Microsoft site)、私のUWP開発ではSharpDXコードを使いやすくなっています。私はWPFでも同じだと思うでしょう。それはC#コードでもあるからです。

0

Direct2Dビットマップは、ハードウェアデバイスに依存するリソースであり、システムのCPU側からは一般的に簡単にアクセスできません。したがって、ID2D1Bitmapのピクセルに到達することは困難であり、そのように使用されることも意図されていない。 Direct2Dビットマップから生のバイトを取得するメカニズムでは、通常、バイトストリームにアクセスするためにWICビットマップを作成して、そのようにします。この方法で、ファイルまたはバイト配列に書き込むことができ、C#でそれにアクセスするためにinteropを使用することができます。ファイルに書き込んでWPFで読み込みたい場合は、このメカニズムが有効です。処理中にしばらくの間にIWICBitmapSourceオブジェクトにビットマップデータがあり、それをキャッシュすることができれば、作業はより簡単になります。 System.Drawing.BitmapSystem.Windows.Media.ImageSourceに変換してください。Converting Bitmap to ImageSource(@MSLに感謝の意を表します)。

この時点で、使用方法は少し不明です。意図した用途や短いサンプルに関する情報が実際に役立つでしょう。

EDIT 1:Save ID2D1Bitmap to fileとファイルにID2D1Bitmapを節約するコードのバージョンのコメント: は、このSO Qnのを見てみましょう。基本的にIWICBitmapに変換してファイルに書き出します。このステップではIWICBitmapIWICBitmapSourceから継承されているので、CopyPixels()メソッドを使用して、ビットマップデータをバイト配列にダンプすることもできます。今

あなたがSystem.Drawing.Bitmapを取得し、それをファイルに保存するアプローチを行っている場合は、同じくらい簡単です:

bitmap = new Bitmap("<YOUR_BITMAP_FILENAME>") 

そして、あなたはとWPFで使用するためのBitmapImageに変換することができます

using(MemoryStream memstream = new MemoryStream()) 
{ 
    bitmap.Save(memstream, ImageFormat.Bmp); 
    memstream.Position = 0; 
    BitmapImage bitmapImage = new BitmapImage(); 
    bitmapImage.BeginInit(); 
    bitmapImage.StreamSource = memstream; 
    bitmapImage.CacheOption = BitmapCacheOption.OnLoad; 
    bitmapImage.EndInit(); 
} 
+0

バイトストリームにアクセスするために、ID2D1BitmapソースからWICビットマップを作成するにはどうすればよいですか?また、WICのビットマップソースからDrawing.Bitmapを取得する方法を説明すると便利です。 – Nick

+0

私はあなたの編集を見ましたが、コードを実行すると、私はビットマップを描くときにD2DERR_WRONG_RESOURCE_DOMAINエラーが表示されます。 – Nick

+0

rtProps.type = D2D1_RENDER_TARGET_TYPE_SOFTWAREを使用してみてください。 rtProps.usage = D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE; – jester

関連する問題