C#快速像素渲染

C#快速像素渲染,c#,graphics,drawing,rendering,kinect,C#,Graphics,Drawing,Rendering,Kinect,我正在使用OpenNI开发深度处理(Xbox Kinect、Asus Xtion等)应用程序 我需要一个非常简单和快速的方式在Windows窗体上绘制新的深度数据时,从传感器(30或60 fps取决于分辨率) 目前,当数据可用时,我正在从一个单独的线程使一个双缓冲面板失效,然后在面板的绘制方法中设置位图的像素,产生一个可怕的5fps System.Drawing.Graphics似乎缺少一种快速设置单个像素的方法,除非有人能给出其他指示 我实际上只需要设置像素颜色,所以如果可能的话,我希望避免使

我正在使用OpenNI开发深度处理(Xbox Kinect、Asus Xtion等)应用程序

我需要一个非常简单和快速的方式在Windows窗体上绘制新的深度数据时,从传感器(30或60 fps取决于分辨率)

目前,当数据可用时,我正在从一个单独的线程使一个双缓冲面板失效,然后在面板的绘制方法中设置位图的像素,产生一个可怕的5fps

System.Drawing.Graphics似乎缺少一种快速设置单个像素的方法,除非有人能给出其他指示

我实际上只需要设置像素颜色,所以如果可能的话,我希望避免使用第三方高速渲染API,最好使用尽可能原生的东西

有人有什么建议吗?

image.SetPixel()
在每帧替换多个像素并且每秒需要多个帧时速度非常慢

当你使用手机和电话时,速度会快得多

通过这种方式,您可以使用多个线程将像素数据填充到阵列中,并且只需在一次调用中将阵列blit到图像中即可

编辑


请注意,WriteableBitmap是一个WPF类。如果您绑定到WinForms,则可能需要创建自己的实现

如果使用位图,则应使用锁定位和解锁位直接访问内存中的数据。在C#中,您可以通过使用不安全的代码块和指针获得一些额外的性能

有关更多信息,请参阅此链接:

您可以尝试使用“缓冲区位图”。它使用一种非常容易访问的语法,但对于大型位图来说性能非常好。它在上作为单个文件提供,并包含在项目中


希望有帮助

当前如何设置像素?使用image.SetPixel(x,y,color)创建位图。毕竟,调用graphics.drawImage(image等)
SetPixel
非常慢。请看
扫描线方法。感谢您的回复,但您提供的答案链接在从WriteableBitmap到System.Drawing.Image.Yes的转换过程中使用了.SetPixel(),这对速度来说非常糟糕。另一种方法是写入数组并使用编码器(PNG、BMP等)将其转换为图像并显示。SetPixel的主要问题是它只设置了一个像素。这是一个巨大的改进。当我绘制一个640x480的空白位图时,我无法达到10 fps以上的速度,所以得出的结论是这个系统。绘制速度根本不快。这个解决方案,再加上缩小图像比例,只渲染部分像素以达到所需的FPS,就是答案。