2012-11-01 87 views
1

即時試圖通過升壓ASIO(不serializtion) 是它不如試試非同步或同步Kinect的深度圖發送到客戶端(目前我的方法IST同步):如何通過boost asio發送OpenNI深度圖給客戶端?

smthg這樣的..

server: 
//depthmap 
const XnDepthPixel* pDepthMap = depth.GetDepthMap(); 
boost::asio::write (socket, boost::asio::buffer (pDepthMap, sizeof(pDepthMap))); //sizeof isnt right.. 

client: 
XnDepthPixel* depth; 
socket.read_some(boost::asio::buffer (&depth, sizeof(XnDepthPixel)* ??)); //send sizeof(pDepthMap) before.. 

編輯: XnDepthPixel(也來自OpenNI)的定義:

/** Defines the depth values type (16-bit values). **/ 
typedef XnUInt16 XnDepthPixel 

和XnUInt16:

/** 16-bit unsigned integer. */ 
typedef unsigned short  XnUInt16; 
+0

異步或同步無關緊要。您需要將XnDepthPixel對象轉換爲字節流。你能用XnDepthPixel的定義來編輯問題嗎? –

+0

好的.. def。是增加.. – ddd

回答

0

sizeof(pDepthMap)只是指針的大小,但實際需要的是發送一些結構,而不是指向它的指針。

請看看ASIO 序列化example看看如何使用Boost.Serialization來完成。 如果你不想使用Boost.Serialization,你可以用你自己的方式「序列化」你的結構,以某種專有的方式。

+0

thx爲您的答案..序列化庫是沒有選擇,我猜.. 現在我不知道如何去真正的數據(不作爲指針),所以我把它們保存在一個額外的數組。 。似乎工作(不那麼高效,但與WiFi此循環不添加任何時間) – ddd