【问题标题】:Matlab to C# bitmap image passingMatlab 到 C# 位图图像传递
【发布时间】:2012-02-10 20:41:25
【问题描述】:

我在 Matlab 中实现了一个算法并部署为 .DLL

我的 C# 代码调用 .DLL 中的函数,因此生成了用于构建绘图的数据。我想让 matlab 代码从此绘图中创建一个 RGB 图像,并将该图像的原始字节发送到 C#。

任何人都可以发布一些代码吗?

我目前正在使用

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

由于磁盘 I/O 操作,我发现它的效率有点低(也许我错了?)。我宁愿将其转换为原始 RGB 数据并将生成的矩阵传递给 C#。我不知道该怎么做。我曾尝试在这样的虚拟图像上使用 ind2rgb:ind2rgb(spiral(5), colormap) 但这似乎没有提供整数 RGB 值。它们似乎仍然在本地颜色图中被索引。我也不知道如何在图形数据上使用 ind2rgb 函数(我不知道如何获取图形对象的图像数据)。

因此,如果有人愿意为我提供一种方法来获取与图形关联的原始图像字节(只有像素数据,没有标题)并将其转换为 RGB。我知道如何将其传递回 C#。

谢谢!

【问题讨论】:

  • 是什么阻止了您在函数中返回代表图像的字节并保存到 c# 结构中?
  • 我是 Matlab 的新手,我不知道如何做到这一点。我已经查过了,可以这么说,无法到达正确的地方来找到这些信息。正如我在上面指出的那样,我知道有一个函数 ind2rgb 可以将索引颜色转换为 RGB,但我不知道如何访问图形对象的实际图像数据。

标签: c# image matlab rgb figure


【解决方案1】:

在 MATLAB 中打开 deploytool() 并创建一个 .net 程序集,然后链接到程序中的 dll。当您调用该函数时,请执行以下操作:

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

您的结果数组将包含您的 MATLAB 函数返回的数组。只需确保您的 MATLAB 函数返回像素的字节值。您可以通过调用获得results MWArray 的尺寸:

int[] dim = results.Dimensions; 

【讨论】:

    【解决方案2】:

    在您的 C# 应用程序中传递打印图的 RGB 数据看起来不太好。那是因为您将矢量图形光栅化为特定大小,并且调整它的大小看起来很难看。

    我建议使用矢量图形。以抽象形式 (X,Y) 和可能的其他属性(如 color)传递该图。如果更复杂,请编写一个接口来传递该信息。

    通过编写一个调用 chart controls 的本机函数,让 C# 应用程序绘制绘图。

    【讨论】:

      【解决方案3】:

      我最初的问题中的措辞可能不合适,但我正在寻找这样的东西:

      h = figure('visible', 'off');
      plot(mydata);
      F = getframe(h);
      im = F.cdata;
      

      【讨论】:

        猜你喜欢
        • 2015-02-12
        • 2017-09-21
        • 1970-01-01
        • 2016-02-22
        • 2017-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多