そのCOMオブジェクトを使用して、C ++ / COMライブラリに実装されたDIBを.NETクライアントに取得する方法
質問
DIBを返すメソッドを含むC ++ / ATLで実装されたCOMオブジェクトがあります。このCOMオブジェクトを使用する.NETアプリケーションも作成しています。両方を書いているので、COMオブジェクトからこのDIBを返す最良の方法を決定する自由があります。明確にするために、ネイティブウィンドウハンドルをDIBまたはバイト配列に返すのが最善でしょうか、またはウィンドウDIBを.NET Imageオブジェクトに簡単に移行する他の方法がありますか?そして、その質問に関連して:DIBが返されたら、どのようにそれを.NET Imageオブジェクトに入れることができますか?
解決
COM / OLEには、 IPicture (およびそのスクリプト対応バージョン IPictureDisp )。
COMは、これらのインターフェイスの実装を提供します。 OleCreatePictureIndirect( )。 PICTDESC構造を渡すだけであなたが持っているグラフィック、そしてそれはあなたに戻ってインターフェイスを提供します。そのインターフェイスを呼び出し元プログラムに渡すことができるはずです。これにより、オブジェクトはVB6などの他のCOMクライアントと互換性があります。
.NETの土地に戻ると、 Microsoft.VisualBasic.Compatibility.VB6.IPictureToImage()。
他のヒント
記事 DIB to System.Bitmap をご覧ください。 CodeProjectで。 DIBからビットマップに変換するコードがあります。その考えは、DIBはIntPtrを使用して表されるということです。
所属していません StackOverflow