[英]Problem Mapping Framebuffer Device Memory using C#/Mono on 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.