Как получить DIB, реализованный в библиотеке C ++ / COM, в клиент .NET, используя этот объект COM

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

  •  06-07-2019
  •  | 
  •  

Вопрос

У нас есть COM-объект, реализованный на C ++ / ATL, который включает метод, который будет возвращать DIB. Мы также пишем приложение .NET, которое будет использовать этот COM-объект. Так как мы пишем оба, мы можем решить, как лучше всего вернуть этот DIB из COM-объекта. Чтобы уточнить, лучше ли будет возвращать собственный дескриптор Windows в DIB или байтовый массив, или есть какой-то другой способ легко преобразовать DIB Windows в объект .NET Image? И, в связи с этим вопросом: как только я получу этот возвращенный DIB, как я могу получить его в объект .NET Image?

Это было полезно?

Решение

COM / OLE имеет стандартный интерфейс для представления графических изображений, который называется IPicture (и его дружественная к сценариям версия IPictureDisp ).

COM предоставляет реализацию этих интерфейсов для вас. Вы можете получить его, чтобы создать его для себя, позвонив по OleCreatePictureIndirect ( ) . Вы просто передаете ему структуру PICTDESC с графика у вас есть, и он возвращает вам интерфейс. Вы должны быть в состоянии передать этот интерфейс обратно вызывающей программе. Это также сделает ваш объект совместимым с другими COM-клиентами, такими как VB6.

Вернувшись в .NET land, вы можете превратить IPicture в изображение, используя Microsoft.VisualBasic.Compatibility.VB6.IPictureToImage () .

Другие советы

Ознакомьтесь со статьей DIB to System.Bitmap . на CodeProject. Он имеет код для преобразования из DIB в растровое изображение. Идея состоит в том, что DIB представляется с использованием IntPtr.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top