我正在尝试DLLImport函数simxGetVisionSensorImage
来自v-rep软件的remoteApi.dll
。这是功能描述的链接:
http://www.coppeliarobotics.com/helpFiles/en/remoteApiFunctions.htm#simxGetVisionSensorImage
以下是上述链接中此功能的简要说明:
描述:检索视觉传感器的图像。如果先前未调用simHandleVisionSensor,则返回的数据没有意义(如果视觉传感器未标记为显式处理,则默认情况下在主脚本中调用simHandleVisionSensor)。使用simxGetLastCmdTime函数验证"新鲜度"检索到的数据。
C简介: simxInt simxGetVisionSensorImage(simxInt clientID,simxInt sensorHandle,simxInt * resolution,simxUChar ** image,simxUChar options,simxInt operationMode)
C参数:
clientID:客户端ID。请参阅simxStart。
sensorHandle:视觉传感器的手柄
分辨率:指向接收图像分辨率的2个simxInt值的指针
image:指向图像数据指针的指针。
选项:图像选项,位编码:bit0设置:每个图像像素是一个字节(灰度图像),否则每个图像像素都是一个rgb字节 - 三元组
operationMode:远程API函数操作模式。
以下是我导入它的方式(simxGetVisionSensorImage
函数):
[DllImport("remoteApi.dll", CallingConvention = CallingConvention.Cdecl)]
public extern static simx_error simxGetVisionSensorImage(int clientID, int sensorHandle, out int resolution, out IntPtr image, char option, simx_opmode opmode);
以下是我如何称呼它:
int intResolution = 0;
char option = '\0';
IntPtr imageIntPtr= IntPtr.Zero;
simxGetVisionSensorImage(intClientID, intCamera1Handle, out intResolution, out imageIntPtr, option, simx_opmode.streaming);
运行成功,intResolution为128,运行后也会验证imageIntPtr。但是,我不知道如何转换" imageIntPtr"变量到图像或位图。
如果有人能帮助我,我真的很感激。
答案 0 :(得分:2)
最简单的方法是从中构建一个新的Bitmap
。
var bmp = new Bitmap(bitmapWidth, bitmapHeight, 3 * bitmapWidth,
PixelFormat.Format24bppRgb, ptrFromApi);