一、什么Mdisp
以Mdisp为前缀的函数构成显示模块。显示模块允许您显示图像并操纵其显示。显示模块提供许多显示效果,例如注释、LUT、平移和缩放。
二、Mdisp常用功能
1. Alloc
Mil里面有Alloc就有Free。
这里没有什么好说的,所有参数默认就可以。
MIL.MdispAlloc(MilSystem, MIL.M_DEFAULT, "M_DEFAULT", MIL.M_DEFAULT, ref MilDisplay);
MIL.MdispFree(MilDisplay);
2. Control
设置Mil的一些参数,这里介绍一些我常用的。
MIL.MdispControl(MilDisplay, MIL.M_ASSOCIATED_GRAPHIC_LIST_ID, MilGraphList); // 绑定Disp ID 和显示的 GraList ID,这样绘制到 GraList 上的结果才可以被显示出来。
MIL.MdispControl(MilDisplay, MIL.M_CENTER_DISPLAY, MIL.M_ENABLE); // 中心显示
MIL.MdispControl(MilDisplay, MIL.M_SCALE_DISPLAY, MIL.M_ENABLE); // 缩放显示
MIL.MdispControl(MilDisplay, MIL.M_MOUSE_USE, MIL.M_ENABLE); // 启用鼠标操作,指缩放平移这些
MIL.MdispControl(MilDisplay, MIL.M_MOUSE_CURSOR_CHANGE, MIL.M_ENABLE); // 也是鼠标交互的一些属性启用
MIL.MdispControl(MilDisplay, MIL.M_GRAPHIC_LIST_INTERACTIVE, MIL.M_ENABLE); // 交互绘图,如果启动了这个,你绘制的图形是可以拖动移动和改变大小的
MIL.MdispControl(show.MilDisplay, MIL.M_ROI_DEFINE, MIL.M_START); // Roi 定义用的
MIL.MdispControl(show.MilDisplay, MIL.M_ROI_SHOW, MIL.M_ENABLE); // Roi Roi显示用的
这里补充说明下,很多功能Mil是默认不开启的,这里开启后一定要记得关闭,而且部分功能的开启并不是为了增加什么功能,只是为了启动这类消息的回调。Mil有很多回调函数和回调信息默认是获取不到的,需要你在定义了回调函数后再启动该消息才可进入回调并查询到该消息。
3. Inquire
查询所有的显示设置,这里介绍一些我常用的。
MIL.MdispInquire(MilDisplay, MIL.M_ZOOM_FACTOR_X, ref ZoomX); // X 方向的显示缩放比
MIL.MdispInquire(MilDisplay, MIL.M_ZOOM_FACTOR_Y, ref ZoomY); // Y 方向的显示缩放比
MIL.MdispInquire(DisplayID, MIL.M_ROI_BUFFER_OFFSET_X, MIL.M_NULL); // Roi 左上角X方向偏移
MIL.MdispInquire(DisplayID, MIL.M_ROI_BUFFER_OFFSET_Y, MIL.M_NULL); // Roi 左上角Y方向偏移
MIL.MdispInquire(DisplayID, MIL.M_ROI_BUFFER_SIZE_X, MIL.M_NULL); // Roi 的宽
MIL.MdispInquire(DisplayID, MIL.M_ROI_BUFFER_SIZE_Y, MIL.M_NULL); // Roi 的高
4. Disp
显示、平移、缩放什么的。
MIL.MdispZoom(MilDisplay, ZoomFactorToApplyX, ZoomFactorToApplyY); // 设置 X Y 方向的缩放比例
MIL.MdispPan(MilDisplay, DISP_PAN_OFFSET_X, DISP_PAN_OFFSET_Y); // 设置 画布 的偏移,偏移的原点是图像的左上角点,重点这里是画布 Gra 类里面也有个偏移,Gra 里面的偏移是画笔,需要注意。
MIL.MdispSelect(MilIDDIsp, MilImage); // 绑定显示图片
MIL.MdispSelect(MilIDDIsp, MIL.M_NULL); // 绑定清空绑定
MIL.MdispSelectWindow(MilDisplay, MilDispImage, panel_.Handle); // 同时绑定显示的图片和显示的窗口。这里注意在C#里面窗口是Panel.Handle,C++里面是 HWND,如果你不想绑定该图片或者窗口,再次知行该函数,并把相应的位置置为 M_NULL
5. Hook
就是设置回调函数,不同的回调函数中可以查询到不同的信息。例子Mil上有很多,大多是C++,这里说下C#怎么调用。
public static MIL_DISP_HOOK_FUNCTION_PTR MouseMoveHookFuncPtr = new MIL_DISP_HOOK_FUNCTION_PTR(MouseMoveHookFunc);
void Domo()
{
thisPtr = GCHandle.Alloc(this);
MIL.MdispHookFunction(MilDisplay, MIL.M_MOUSE_MOVE, MouseMoveHookFuncPtr, GCHandle.ToIntPtr(thisPtr));
}
static MIL_INT MouseMoveHookFunc(MIL_INT HookType, MIL_ID EventID, IntPtr UserDataPtr)
{
GCHandle gch = GCHandle.FromIntPtr(UserDataPtr);
MilGraphicShow graphic = (MilGraphicShow)gch.Target;
MIL.MdispGetHookInfo(EventID, MIL.M_MOUSE_POSITION_X, ref graphic.px);
}