Wie ein DIB implementiert in einer C ++ / COM-Bibliothek in einen .NET-Client, dass die COM-Objekt erhalten

StackOverflow https://stackoverflow.com/questions/265967

  •  06-07-2019
  •  | 
  •  

Frage

Wir haben ein COM-Objekt mit C ++ / ATL implementiert, die ein Verfahren umfasst, die eine DIB zurück. Wir schreiben auch eine .NET-Anwendung, die dieses COM-Objekt verwenden wird. Da wir beide schreiben, haben wir die Freiheit zu entscheiden, wie man am besten diese DIB aus dem COM-Objekt zurück. Um zu klären, wäre es am besten ein native Fenster zu einem DIB oder einen Byte-Array behandeln zurückzukehren oder gibt es eine andere Art und Weise leicht ein Fenster DIB in ein .NET Image-Objekt zu überführen? Und auf diese Frage bezogen werden: sobald ich habe diese DIB zurückgegeben, wie kann ich es in ein .NET Image-Objekt erhalten

?
War es hilfreich?

Lösung

COM / OLE hat eine Standard-Schnittstelle für die Darstellung von grafischen Bildern genannt IPicture (und seine Skripting-Version IPictureDisp ).

COM stellt eine Implementierung dieser Schnittstellen für Sie. Sie können es für Sie zu bauen durch den Aufruf OleCreatePictureIndirect ( ) . Sie geben ihm nur ein PICTDESC Struktur mit der Grafik, die Sie haben, und es gibt Ihnen eine Schnittstelle zurück. Sie sollten diese Schnittstelle an das aufrufende Programm zur Hand können. Dies wird auch Ihr Objekt kompatibel mit anderen COM-Clients wie VB6 machen.

Zurück in .NET Land können Sie einen IPicture in ein Bild drehen mit Microsoft.VisualBasic.Compatibility.VB6.IPictureToImage () .

Andere Tipps

Haben Sie einen Blick auf den Artikel DIB zu System.Bitmap auf Codeproject. Es hat den Code von einem DIB zu einem Bitmap zu konvertieren. Die Idee ist, dass die DIB ein IntPtr dargestellt verwendet wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top