Search code examples
c#graphicsdrawingrenderingkinect

C# fast pixel rendering


I'm developing depth processing (Xbox Kinect, Asus Xtion, etc) applications using OpenNI.

I need a really simple and fast way of drawing on a Windows form when new depth data is available from the sensor (30 or 60 fps depending on resolution).

Currently I'm invalidating a double-buffered panel from a seperate thread when the data becomes available, and then setting pixels of a bitmap in the panel's paint method, yielding a predictably awful 5fps.

System.Drawing.Graphics seems to lack a fast way to set individual pixels, unless anyone can instruct otherwise.

I literally just need to set pixel colours, so would like to avoid using third party high speed rendering APIs if possible, and ideally use something as native as possible.

Does anyone have any suggestions?


Solution

  • If you're using Bitmaps, then you should use LockBits and UnlockBits to access the data directly in memory. In C#, you can get some extra performance by using unsafe code blocks and pointers.

    See this link for more information: http://web.archive.org/web/20150227183132/http://bobpowell.net/lockingbits.aspx