繁体   English   中英

Raspberry Pi和带有单声道的帧缓冲输入

[英]Raspberry Pi and framebuffer input with mono

我正在尝试使用Mono在内存中渲染位图。 该图像应显示在Adafruits 2.8英寸触摸TFT(320 * 240)上。该程序是使用Visual Studio 2013 Community Edition开发的。我想托管一个ASP.NET Web Api并在显示器上显示一些数据。ASP.NET我的想法是将Image写入帧缓冲输入,但是这样做我得到一个异常,说文件太大了,我只是在没有BMP Header的情况下写原始数据。这样做可能是因为创建图像是错误的,这似乎是发生了某种事情,因为显示发生了变化,并且我可以看到图像中的白色区域,因此我不想使用任何额外的库来简化它。想法是直接使用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();
        }
    }
}

看看http://computerstruggles.blogspot.de/2013/02/how-to-program-directfb-in-c-on.html-这个想法是安装directfb库,并通过C#与PInvoke一起使用。 博客的作者使用C语言中的迷你包装器使使用起来更加轻松。 顺便说一句,您为什么不喜欢安装其他库并从其他人为您完成的工作中获利呢?

当MemoryStream重新分配内存时,您可能会用完内存。 当需要增长时,它的大小会增加一倍。 如此大量的写入,内部缓冲区可能超出了可用内存。 请参阅为什么C#内存流保留这么多的内存? 欲获得更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM