我正在尝试从高端数码相机中读取像素数据。图像大小为320 * 256像素,大小为2个字节。
Int8* ImageBuffer = (Int8 *) malloc(320 * 256 * 2);
Int32 result = imgGrab ((void **)&ImageBuffer);
以上代码读取图像,但我不知道如何获得像素数据。
我尝试了以下内容;
WORD* myImage = (WORD*)malloc(320*256*2);
memcpy (myImage, ImageBuffer, 320*256*2 );
所以我这样做是为了将8bit ImageBuffer转换为16bit,因为每个像素是2个字节。 我认为我走在正确的轨道上,但我在myImage中获得的数据并不正确。它主要是零并包含负数。
我想知道我是否感到困惑,因为imgGrab的第二个参数是一个指向指针的指针。 本手册将第二个参数描述为“指向指向存储图像的存储区域的指针的指针”
这个功能正在做我认为它正在做的事情,即。将图像的像素数据复制到myImage?
memcpy (myImage, ImageBuffer, 320*256*2 );
感谢您的帮助。
答案 0 :(得分:0)
首先,指向的指针是你不需要分配这个内存的提示。您需要将指针传递给imgGrab
,而imgGrab
实际上会指向它已分配的缓冲区。所以你只是在那里有内存泄漏。而且,你不需要memcpy
和额外的缓冲来做这种演员。应该是这样的:
WORD* myImage = 0;
Int32 result = imgGrab ((void **)&myImage );
但是,你在那里做的应该在你的myImage
缓冲区产生相同的结果,所以在你的代码片段之外可能还有其他错误。