我想用mono命令在我的Linux电脑上运行一个.NET应用程序。
mono application.exe
我获得了一些小的成功,并收到了图形用户界面,这是一样的,在windows上运行。所以我很高兴在我的Linux平台上看到GUI。
然后,我想在windows平台上显示一个完美的图像到窗口中。
但是当我试图在我的Linux平台上使用mono命令运行同一个.net应用程序时,我无法成功地显示windows平台上显示的图像。
请参阅下面的代码引用以将图像显示到windows平台中。
byte[] data_rgb;
data_rgb = new Byte[HEIGHT * WIDTH * 3];
public const int HEIGHT = 1944;
public const int WIDTH = 2592;
fixed (byte* bPtr = data_rgb)
{
IntPtr pSrc = (IntPtr)bPtr;
bmp = new Bitmap(WIDTH, HEIGHT, STRIDE, PixelFormat.Format24bppRgb, pSrc);
}
数据rgb是来自硬件的数据缓冲区,大约为6mbrgb数据。
有人知道为什么上面的功能不能在使用mono实用程序的Linux平台上运行吗?
另外,请让我知道,如果有任何其他方式显示图像使用其他图书馆在windows中,可以支持到Linux平台使用单帧显示图像。
还有一个问题是如何刷新由mono命令运行的windonw?因为每当我使用Muno实用程序运行.NET二进制时,那么最小化或最大化窗口,然后它不能与Windows相比被最小化或最大化。
如何使用mono刷新linux中的窗口?
最佳答案
问题不在于Mono和Bitmap类。
问题是你的图像数据来自哪里:你提到它来自USB设备。但如何从.NET代码访问设备?似乎你在使用IntPtr,这让我认为你在使用P/Invoke。
P/Invoke本质上是一种不跨平台的技术。如果希望程序在没有特定平台代码的平台(Linux和Windows)上运行,则应坚持使用托管代码。
更新:您提到您有一个“.so”库来访问Linux上特定于平台的功能。那么这可能是不起作用的一点。您应该在stackoverflow上发布一个全新的问题,其中包含在Linux中用于P/Invoke该库的代码。