0

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

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?因为每当我使用 mono 实用程序运行 .NET 二进制文件时,然后最小化或最大化窗口,然后与 Windows 相比,它无法正确最小化或最大化。

如何使用单声道刷新linux中的窗口?

4

1 回答 1

1

问题不在于 Mono 和 Bitmap 类。

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

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

更新:您提到您有一个“.so”库来访问 Linux 上特定于平台的功能。那么这可能是不工作的位。您应该使用您在 Linux 中 P/Invoke 该库的代码在 stackoverflow 上发布一个全新的问题。

于 2013-08-13T13:25:17.133 回答