在windows和mono linux平台上显示RGB图像

时间:2013-08-13 07:04:28

标签: c# linux windows winforms mono

我想使用mono命令将一个.NET应用程序运行到我的Linux PC中。

mono application.exe 

我获得了一些成功并获得了与在Windows上运行相同的GUI。所以我很高兴在我的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);
}

data_rgb是来自硬件的数据缓冲区,大约是6 MB RGB数据。

是否有人知道为什么上述功能无法在Linux平台上使用单声道实用程序?

另外,如果还有其他方法可以使用Windows中的其他库来显示图像,请使用单帧来支持Linux平台显示图像。

还有一个问题是我如何刷新由mono命令运行的windonw?因为无论何时我使用单声道实用程序运行.NET二进制文件,然后最小化或最大化窗口,那么与Windows相比,它无法最小化或最大化。

如何使用mono?

刷新linux中的窗口

1 个答案:

答案 0 :(得分:1)

问题不在于Mono和Bitmap类。

问题在于您的图像数据来自:您提到它来自USB设备。但是如何从.NET代码访问您的设备?好像你正在使用IntPtr,这让我认为你正在使用P/Invoke

P / Invoke本质上是一种非跨平台的技术。如果您希望程序在没有特定平台代码的平台(Linux和Windows)上工作,则应该坚持托管代码

更新:您提到您有一个“.so”库来访问Linux上的平台特定功能。那么这可能是不起作用的一点。你应该在stackoverflow上发布一个全新的问题,用你正在使用的代码来调用Linux中的那个库。