2016-08-10 2 views
0

Мне нужно обработать изображение, которое предоставляется программой C# как объект Bitmap. Обработка выполняется в ++ DLL C, которая получает дескриптор объекта GDI (HBITMAP), созданный из растрового изображения, с помощьюИзменение битовой карты C# во внешней DLL

Bitmap.GetHbitmap(); 

Аргумент проходящий между C# и библиотеки DLL работает отлично, и объект GDI имеет ожидаемые характеристики. Я могу читать пиксели изображения в DLL.

В любом случае, когда я пытаюсь изменить изображение через DLL, это изменение не отражается в приложении C#, как если бы изображение было только для чтения. Я подозреваю, что необходимо выполнить некоторую операцию для преобразования обратно с объекта GDI в экземпляр Bitmap, но я ничего не вижу в .NET API.

Мне известно о механизме LockBits/UnlockBits, который я мог бы использовать, если ничего не работает, но мое текущее требование - передать только ручку.

Подсказка?

+1

Возможно, вы ищете [** 'Image.FromHbitmap()' **] (https://msdn.microsoft.com/en-us/library/k061we7x (v = vs.110) .aspx)? –

+0

@VisualVincent Yesss! Это то, что мне нужно, это работает. Вы можете ввести это как ответ, я думаю. –

+0

Рад это слышать! –

ответ

1

Что вы ищете, это метод Image.FromHbitmap(). Используя его, вы сможете конвертировать из HBITMAP в .NET Bitmap.

Bitmap bmp = Image.FromHbitmap(<HBITMAP pointer here>); 
+0

Растровые данные действительно дублируются и должны быть скопированы обратно. Я бы предпочел прямой доступ к буферам .NET Bitmap, но я боюсь, что это не pssible. –

+0

@YvesDaoust: Ну, я не знаю ни одного способа сделать это, так что, думаю, нет. –

Смежные вопросы