通常来说输出的数据模式是一种像素图格式类型的生产节点都称为图生成器(Map Generator),这是一个广义的概念,实际上深度生成器、图像生成器等都属于图生成器。图生成器下也会有一些特定的功能,这一章节就详述一些广义上图生成器的功能的实现方法,这些功能也都可以被子图生成器所继承。
6.2.1 获取支持图输出模式
1.实例
每一个图生成器都会有其特定支持的输出模式,在使用一些未知属性的设备之时,就需要预先知道该设备所支持的输出模式量以及种类。
2.实现方法
在图生成器模式之下,提供了获取图生成器支持模式数量,以及支持模式的函数,调用图生成器下的xnGetSupportedMapOutputModesCounts()函数可以获得该图生成器支持的输出模式的数量,其使用方法分别如下代码所示。
// get supported mapmode number xn::MapGenerator mMapGenerator; XnUInt32 nCount; nCount = mMapGenerator.GetSupportedMapOutputModesCount();
调用图生成器下的GetSupportedMapOutputModesCount()函数,则会返回一个XnUInt32类型的整数给nCount,nCount的值则是该图生成器所支持的输出模式的数量,不过若是nCount值为0则说明该生成器不是图生成器。
调用xnGetSupportedMapOutputModes()函数则可以获得该图生成器所支持的所有的输出模式,其使用方法如下代码所示。
// get supported mapmodes XnUInt32 nCount = 100; xn::MapGenerator mMapGenerator; XnMapOutputMode* nModes; mMapGenerator.GetSupportedMapOutputModes(nModes,nCount);
获取支持图输出模式的函数有两个参数,其中nModes图输出模式链表用于存储支持的输出模式,nCounts传入之前表示给链表分配的空间,传递出来之后表示实际占用的空间,换句话说,也就是实际支持的图输出模式的数量。
6.2.2 图生成器输出模式
1.实例
图生成器的本质是输出一张像素图,像素图的一些属性则构成了这个图生成器的输出模式。
2.实现方法
在OpenNI中给图输出模式定义了三个属性,分别是nXRes(X轴像素)、nYRes(Y轴像素)、nFPS(帧数),在实际使用中对于这三个属性的设置,就是对图输出模式的设置,具体代码如下。
// mapoutputmode XnMapOutputMode mapMode; mapMode.nXRes = 320; mapMode.nYRes = 240; mapMode.nFPS = 30;
以上述实例来说,就是把图输出模式设定为320*240、30帧的格式。设定图输出模式时要考虑到设备实际支持的输出模式。非设备支持的模式可能无法运行,或者出现错误。
6.2.3 获取和设置图输出模式
1.实例
当一个图生成器被创建时,其输出模式是系统默认的输出模式,当然很多时候,开发者需要根据需求修改图生成器的输出模式,或者需要获取这个图生成器当前的模式。
2.实现方法
图生成器输出模式的获取以及设置,实际上是差不多的,在OpenNI中,图生成器提供两个函数,分别为GetMapOutputMode()和SetMapOutputMode()。
调用GetMapOutputMode()函数就可以获取当前图生成器的输出模式,具体代码如下。
// GetMapOutPutmode xn::MapGenerator mMapGenerator; XnMapOutputMode mapMode; mMapGenerator.GetMapOutputMode(mapMode);
通过调用图生成器mMapGenerator下的GetMapOutputMode函数就可以获得mMapGenerator图生成器当前的图输出模式,也就是返回的mapMode值就是当前支持的图输出模式。
调用SetMapOutputMode()函数就可以设置当前图生成器的输出模式,具体代码如下。
// GetMapOutPutmode xn::MapGenerator mMapGenerator; XnMapOutputMode mapMode; mMapGenerator.GetMapOutputMode(mapMode);
首先要预先设定好一个图输出模式,例中的mapMode即是,例中设定为640*480,30fps,而后通过调用图生成器的SetMapOutputMode函数将图生成器mMapGenerator设定成mapMode模式的输出模式,这样,当图生成器mMapGenerator开始产生数据时,就是以每秒30帧的速率产生一张张像素为640*480的图。
6.2.4 获取图像素字节数
1.实例
图都是由一个个像素构成的,不过对于不同的图,其每一个像素的构成所使用的字节数则有所不同,在OpenNI的一些应用计算中,或许会用到这样的信息。
2.实现方法
在OpenNI中,图生成器提供了用于获取像素图的字节数的函数。调用xnGetByte PerPixel()函数会返回一个XnUInt32类型的数据,该数据的值就是当前图每一个像素所占用的字节数,该函数的使用方法如下代码所示。
// GetBytesPerPixel xn::MapGenerator mMapGenerator; XnUInt32 nCount; nCount = mMapGenerator.GetBytesPerPixel();
例中调用图生成器mMapGenerator下的GetBytesPerPixel()函数,之后将获取到的返回值传递给nCount,nCount就是我们想要知道的信息:图每一个像素的字节数。