Передача растрового изображения из Matlab в C # - PullRequest
1 голос
/ 11 февраля 2012

У меня есть алгоритм, реализованный в Matlab и развернутый как .DLL

Мой код C # вызывает функции из .DLL и в результате эти данные генерируются для построения графика.Я хотел бы, чтобы код Matlab создавал RGB-изображение из этого графика и отправлял необработанные байты этого изображения на C #.

Может кто-нибудь опубликовать какой-нибудь код, который делает именно это?В настоящее время я строю график, используя

$h = figure('visible', 'off');
plot(mydata);
print(h, '-r80', '-dbmp', file1);

, который я считаю немного неэффективным (возможно, я ошибаюсь?) Из-за операции ввода-вывода на диске.Я предпочел бы преобразовать это в необработанные данные RGB и передать полученную матрицу в C #.Я понятия не имею, как это сделать.Я попытался использовать ind2rgb на фиктивном изображении, например: ind2rgb (spiral (5), colormap), но, похоже, это не дает целочисленных значений RGB.Они по-прежнему индексируются в локальной цветовой карте.Кроме того, я понятия не имею, как использовать функцию ind2rgb для данных фигур (я не знаю, как получить данные изображений объектов фигур).

Так что, если кто-то будет так любезен, предоставит мнес помощью метода, чтобы получить необработанные байты изображения (только данные пикселей, без заголовка), связанные с рисунком, и преобразовать его в RGB.Я знаю, как передать это обратно в C #.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 11 февраля 2012

Передача данных RGB распечатанного графика не будет хорошо выглядеть в вашем приложении C #.Это потому, что вы растрили свою векторную графику до определенного размера, а ее размер выглядит ужасно.

Вместо этого я рекомендую использовать векторную графику.Передайте сюжет в его абстрактной форме (X,Y) и, возможно, другие свойства, например color.Если это сложнее, напишите интерфейс для передачи этой информации.

Заставьте приложение C # рисовать график, написав собственную функцию, которая вызывает элемент управления диаграммы .

0 голосов
/ 11 февраля 2012

Возможно, формулировка не подходит для моего первоначального вопроса, но я искал что-то вроде этого:

h = figure('visible', 'off');
plot(mydata);
F = getframe(h);
im = F.cdata;
0 голосов
/ 11 февраля 2012

В MATLAB откройте deploytool () и создайте сборку .net, затем создайте ссылку на dll в своей программе Когда вы вызываете функцию, сделайте что-то вроде этого:

AssemblyName.ClassName myClass = new AssemblyName.ClassName();
MWArray results = myClass.FunctionName(...functionArgs);

В вашем массиве результатов будет массив, возвращенный вашей функцией MATLAB. Просто убедитесь, что ваша функция MATLAB возвращает байтовые значения пикселей. Вы можете получить размеры results MWArray, позвонив по номеру:

int[] dim = results.Dimensions; 
...