C#DllImport - 指向接收图像的指针(uchar **)

时间:2015-07-24 18:31:51

标签: c# image dllimport

我正在尝试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"变量到图像或位图。

如果有人能帮助我,我真的很感激。

1 个答案:

答案 0 :(得分:2)

最简单的方法是从中构建一个新的Bitmap

var bmp = new Bitmap(bitmapWidth, bitmapHeight, 3 * bitmapWidth,
    PixelFormat.Format24bppRgb, ptrFromApi);