Передача данных изображения между C # и C ++ - PullRequest
1 голос
/ 20 февраля 2009

Я работаю над проектом, в котором собираюсь создать пользовательский интерфейс в приложении на C #. Нужно отобразить картинку. И я хочу передать данные изображения в модуль C ++, который отредактирует его и вернет результат.

Я уже установил, как передавать данные между C # и C ++ (я использую C ++ DLL). У меня вопрос: какой класс в C # может делать то, что я хочу? Мне это нужно для экспорта данных изображения в некую матрицу пикселей (предпочтительно с отдельными значениями RGB, каждое размером 1 байт = 3 байта на пиксель), с которыми я могу работать в модуле C ++. Кроме того, он должен иметь возможность импортировать результат обратно в объект и отображать его в окне приложения C # Windows.

Любые идеи, какой класс мог бы работать лучше для меня?

Спасибо, Малки.

Ответы [ 4 ]

3 голосов
/ 20 февраля 2009

Если вы хотите работать с данными пикселей, как вы описываете, тогда Bitmap.LockBits - метод для вас.

0 голосов
/ 20 февраля 2009

В ответ всем вам! : -)

Нет, вам не нужен маршалинг и небезопасный код, если вы просто хотите передать пиксели в собственный C ++.

Вы можете проверить этот пост, где я делаю точно это, вызывая функцию C ++, содержащую язык ассемблера, созданный вручную, для некоторой обработки изображений:

http://danbystrom.se/2008/12/22/optimizing-away-ii/

0 голосов
/ 20 февраля 2009

В дополнение к ответу Данбистрома о Bitmap.LockBits вам нужно взглянуть на класс Marshal для копирования двоичных данных. Проверьте метод Marshal.Copy для примера.

0 голосов
/ 20 февраля 2009

Что ожидает ваш dll-метод в качестве входных параметров?

РЕДАКТИРОВАТЬ: Насколько я знаю, в C # вам нужно перейти в «небезопасный режим» для работы с пикселями напрямую (и быстро :)). Что-то вроде это .

...