我知道Mat数据将每个像素数据(列中的RGB数据)保存为unsigned char。 unity3d中的纹理数据是byte []。我尝试做以下事情,但结果不对,从hwind中显示的相机拍摄的图像不正确。
Mat src_frame;//this is every frame that captured from the current camera
D3DLOCKED_RECT d3d_rect;
byte *pSrc = src_frame.data;
byte *pDest = (byte *)d3d_rect.pBits;
int stride = d3d_rect.Pitch;
int pixel_w_size = src_frame.cols;
for (unsigned long i = 0; i < src_frame.rows; i++){
memcpy(pDest, pSrc, pixel_w_size);
pDest += stride;
pSrc += pixel_w_size;
}
只有灰色图像显示,我不知道为什么会发生这种情况。 Mat数据序列是否与纹理数据不同?他们的数据都包含RGB信息。
答案 0 :(得分:0)
pixel_w_size
应该src_frame.cols
乘以每个像素的字节数(RGB情况下为3),甚至更好地使用elemSize()
。
所以使用:
int pixel_w_size = src_frame.cols * src_frame.elemSize();