Cómo implementar un DIB en una biblioteca C ++ / COM en un cliente .NET usando ese objeto COM

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

  •  06-07-2019
  •  | 
  •  

Pregunta

Tenemos un objeto COM implementado con C ++ / ATL que incluye un método que devolverá un DIB. También estamos escribiendo una aplicación .NET que usará este objeto COM. Como estamos escribiendo ambos, tenemos la libertad de decidir la mejor manera de devolver este DIB desde el objeto COM. Para aclarar, ¿sería mejor devolver un identificador de Windows nativo a un DIB o una matriz de bytes o hay alguna otra forma de hacer una transición fácil de un DIB de Windows a un objeto de imagen .NET? Y, en relación con esa pregunta: una vez que haya devuelto DIB, ¿cómo puedo obtenerlo en un objeto de imagen .NET?

¿Fue útil?

Solución

COM / OLE tiene una interfaz estándar para representar imágenes gráficas llamada IPicture (y su versión compatible con scripts IPictureDisp ).

COM proporciona una implementación de estas interfaces para usted. Puede conseguir que cree uno para usted llamando a OleCreatePictureIndirect ( ) . Simplemente déle una estructura PICTDESC con el gráfico que tiene, y le devuelve una interfaz. Debería poder devolver esa interfaz al programa de llamada. Esto también hará que su objeto sea compatible con otros clientes COM como VB6.

De vuelta en tierra .NET, puede convertir una IPicture en una imagen usando Microsoft.VisualBasic.Compatibility.VB6.IPictureToImage () .

Otros consejos

Eche un vistazo al artículo DIB to System.Bitmap en CodeProject. Tiene el código para convertir de un DIB a un mapa de bits. La idea es que el DIB se represente usando un IntPtr.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top