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

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

Ответы [ 2 ]

2 голосов
/ 05 ноября 2008

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

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

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

1 голос
/ 05 ноября 2008

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

...