对于当前操作,海康官网给出的代码如下
public ImageBaseData
CCDToImageBaseData(MyCamera.MV_FRAME_OUT frameOut)
{
ImageBaseData imageBaseData = new ImageBaseData();
imageBaseData.Width = frameOut.stFrameInfo.nWidth;
imageBaseData.Height = frameOut.stFrameInfo.nHeight;
imageBaseData.DataLen = frameOut.stFrameInfo.nFrameLen;
if (frameOut.stFrameInfo.enPixelType ==MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono8)
{
imageBaseData.Pixelformat = (int)VMPixelFormat.VM_PIXEL_MONO_08;
}
else if (frameOut.stFrameInfo.enPixelType == MyCamera.MvGvspPixelType.PixelType_Gvsp_RGB8_Packed)
{
imageBaseData.Pixelformat = (int)VMPixelFormat.VM_PIXEL_RGB24_C3;
}
imageBaseData.ImageData = new byte[frameOut.stFrameInfo.nFrameLen];
Marshal.Copy(frameOut.pBufAddr, imageBaseData.ImageData, 0, (int)frameOut.stFrameInfo.nFrameLen);
return imageBaseData;
}
var image = CCDToImageBaseData(stFrameOut);
//设置到图像源
ImageSourceModuleTool imageSourceModuleTool = (ImageSourceModuleTool)VmSolution.Instance["流程 1.图像源 1"];
imageSourceModuleTool.SetImageData(image);
但是在我安装的MVS SDK中,不存在MyCamera.MV_FRAME_OUT
属性,我的解决方法如下
//在相机控制类中注册回调函数,通过ImageCallbackFunc回调函数获取视频帧并保存至_InputImage
private static cbOutputExdelegate ImageCallback;
public ImageBaseData _InputImage = null;
ImageCallback = new cbOutputExdelegate(ImageCallbackFunc);
nRet = m_MyCamera.RegisterImageCallBackEx(ImageCallback, IntPtr.Zero);
if (CErrorDefine.MV_OK != nRet)
{
Utility.ShowErrorMsg("Register image callback failed!", nRet);
}
private void ImageCallbackFunc(IntPtr pData, ref MV_FRAME_OUT_INFO_EX pFrameInfo, IntPtr pUser)
{
try
{
ImageBaseData imageBaseData = new ImageBaseData();
imageBaseData.Width = pFrameInfo.nWidth;
imageBaseData.Height = pFrameInfo.nHeight;
imageBaseData.DataLen = pFrameInfo.nFrameLen;
imageBaseData.ImageData = new byte[pFrameInfo.nFrameLen];
Marshal.Copy(pData, imageBaseData.ImageData, 0, (int)pFrameInfo.nFrameLen);
_InputImage = imageBaseData;
}
catch(Exception ex)
{
}
}
var image = CamControl._InputImage ;
//设置到图像源
ImageSourceModuleTool imageSourceModuleTool = (ImageSourceModuleTool)VmSolution.Instance["流程 1.图像源 1"];
imageSourceModuleTool.SetImageData(image);
其中CamControl类需要自行定义。