C# 带单声道的Raspberry Pi和帧缓冲区输入

C# 带单声道的Raspberry Pi和帧缓冲区输入,c#,mono,raspberry-pi,framebuffer,C#,Mono,Raspberry Pi,Framebuffer,我正在尝试使用mono在内存中渲染位图。此图像应显示在Adafruits 2.8英寸触摸TFT(320*240)上。该程序是使用Visual Studio 2013社区版开发的。我想主持一个ASP.NET Web Api并显示 显示部分数据。ASP.NET部件工作正常,图像已渲染。我的想法是将图像写入帧缓冲区输入,但执行此操作时,我遇到一个异常,即文件太大。我只是在写入没有BMP标头的原始数据。是否有人管理过此操作?可能创建图像是错误的 错。 这似乎是发生了一些事情,因为显示器发生了变化,我可以

我正在尝试使用mono在内存中渲染位图。此图像应显示在Adafruits 2.8英寸触摸TFT(320*240)上。该程序是使用Visual Studio 2013社区版开发的。我想主持一个ASP.NET Web Api并显示 显示部分数据。ASP.NET部件工作正常,图像已渲染。我的想法是将图像写入帧缓冲区输入,但执行此操作时,我遇到一个异常,即文件太大。我只是在写入没有BMP标头的原始数据。是否有人管理过此操作?可能创建图像是错误的 错。 这似乎是发生了一些事情,因为显示器发生了变化,我可以看到可能来自我的图像的白色区域。 我不想使用任何额外的库来保持简单。所以我的想法是直接使用FBI。有人知道这个问题和解决方案吗

以下是我的一些代码:

using (Bitmap bmp = new Bitmap(240, 320, PixelFormat.Format16bppRgb555))
{
    [...]
    Byte[] image = null;

    using(MemoryStream memoryStream = new MemoryStream())
    {
        bitmap.Save(memoryStream, ImageFormat.Bmp);

        Byte[] imageTemp = memoryStream.GetBuffer();
        //Remove BMP header
        image = new Byte[imageTemp.Length - 54];
        Buffer.BlockCopy(imageTemp, 54, image, 0, image.Length);
        //153600 byte
        using (FileStream fb1 = new FileStream("/dev/fb1", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
        {
            fb1.Write(image, 0, image.Length);
            fb1.Close();
        }
    }
}

看一看-这个想法是安装directfb库并从C#with PInvoke使用它。该博客的作者使用了C中的一个迷你包装器,使使用变得更加简单。顺便问一下,你为什么不喜欢安装其他库并从别人为你做的工作中获益呢?

当MemoryStream realloca出现时,你的内存可能已经用完了tes内存。当需要增长时,它的大小会翻倍。由于写入量如此之大,内部缓冲区可能超过可用内存。有关更多信息,请参阅。

我不是这里的专家(除了拥有Raspi:-),但无论如何:您是否尝试过以较小的块写入数据?您是否确定位图的二进制数据是帧缓冲区所期望的?例如,可能BMP数据是运行长度编码的,FB不喜欢它,或者相反……好的,我可以安装DirectFB并使用PInvoke。我正在Windows下开发,不知道多少关于linux。我只知道PInvoke在Windows中使用Dll。我认为用C编写一个包装器并在那里实现所有结构太难了。我怎么能只用C代码和PInvoke来使用directfb?对不起,我知道的不多,我已经告诉过你了。也许Pi不是最好的编码设备,因为C是唯一可以选择的编程语言M