我目前正在与Kinect合作,我想在kinect的VGA图像上绘制骨架的骨骼。首先,我从kinect获取图片:
HRESULT hr = globalNui->NuiImageStreamGetNextFrame( videoStreamHandle, 0, &frame);
INuiFrameTexture * texture = frame.pFrameTexture;
NUI_LOCKED_RECT lockedRect;
texture->LockRect( 0, &lockedRect, NULL, 0);
我们在NUI_LOCKED_RECT中有它,所以我们可以用它做任何事情。最常见的方法是将其转换为位图并将其放在屏幕上,但我想对图像进行一些修改。我使用Direct2D将它带到屏幕上,所以我需要一个可以转换为ID2D1Bitmap的图像格式,我必须能够在其上绘制线条和点。我需要什么样的形象?
答案 0 :(得分:1)
锁定的缓冲区将包含一个大小为width * height * 4
字节的简单数组。每个像素都是一个4字节的XRGB(参见文档:http://msdn.microsoft.com/en-us/library/jj131027.aspx)。图像将按行顺序存储,因此位置x,y
的像素将具有数组索引((width * y) + x) * 4)
。
这是一种标准的图像缓冲格式,您可以随意使用几乎任何其他图像处理库,例如Microsoft自己的WIC,或IPL或OpenCV等等。迭代缓冲区并直接设置RGB值应该没有问题,这对于简单的图形工作应该是绰绰有余的。
答案 1 :(得分:0)
所以我认为没有任何图像格式可以满足我的需求。没问题,因为我发现了Direct2D的所有可能性。现在我实际上并没有改变图像,但对于用户来说它看起来是一样的。