Matlab到C#的位图图像传递
本文关键字:图像 位图 Matlab | 更新日期: 2023-09-27 18:24:00
我有一个在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#。
谢谢!
在MATLAB中打开deploytool()并创建一个.net程序集,然后链接到程序中的dll。当你调用函数时,做这样的事情:
AssemblyName.ClassName myClass = new AssemblyName.ClassName();
MWArray results = myClass.FunctionName(...functionArgs);
结果数组将包含MATLAB函数返回的数组。只需确保MATLAB函数返回像素的字节值。您可以通过调用来获取results MWArray
的尺寸
int[] dim = results.Dimensions;
在C#应用程序中传递打印图的RGB数据看起来不太好。这是因为您将矢量图形光栅化到特定的大小,而调整其大小看起来很难看。
相反,我建议使用矢量图形。以抽象形式(X,Y)
传递图,并可能传递其他属性,如color
。如果比较复杂,可以编写一个接口来传递该信息。
通过编写一个调用图表控件的本机函数,使C#应用程序绘制绘图。
在我最初的问题中,措辞可能不合适,但我正在寻找这样的东西:
h = figure('visible', 'off');
plot(mydata);
F = getframe(h);
im = F.cdata;