【VM服务管家】VM4.x算子SDK开发_3.4 控件嵌入类

3.4.1 图片存储:图片保存的方法

描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:算子SDK开发如何存储图片。
解答
调用SaveImage(图片储存),以存储图片到E盘为例,示例代码如下,其中要判断路径中的文件夹已经创建。

1.	C#
2.	
3.	string imageName="a";
4.	MVD_FILE_FORMAT ms=MVD_FILE_FORMAT.MVD_FILE_BMP;//图片格式
5.	//保存原图
6.	runImage.SaveImage(“E:\\”+imageName+”_origin.bmp”);
7.	//保存渲染图,参数分别为图片路径,图片格式,图片质量(0-100)
8.	mvdRenderActivex1.SaveImage(“E:\\”+imageName+”_render.bmp”,ms,100,MVD_SAVE_TYPE.MVD_SAVE_RESULT_IMAGE);

问题根因
不熟悉相关接口的使用。

3.4.2 辅助十字线:给图像添加辅助十字线的方法

描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:有的用户在使用算子SDK开发时,希望能够在图像上显示辅助十字线。
解答
算子SDK在图像上显示辅助十字线的方法如下:

1.	c#
2.	 
3.	CMvdLineSegmentF line1 = new CMvdLineSegmentF(new MVD_POINT_F(mvdimage.Width/2, 0),new MVD_POINT_F(mvdimage.Width / 2, mvdimage.Height ));//定义线段
4.	CMvdLineSegmentF line2 = new CMvdLineSegmentF(new MVD_POINT_F(0, mvdimage.Height/2),new MVD_POINT_F(mvdimage.Width, mvdimage.Height/2));//定义线段
5.	line1.BorderStyle = MVD_DASH_STYLE.MvDashStyleDashDot;//设置线型
6.	line1.BorderColor = new MVD_COLOR(250, 0, 0);//设置线的颜色
7.	line2.BorderStyle = MVD_DASH_STYLE.MvDashStyleDashDot;//设置线型
8.	line2.BorderColor = new MVD_COLOR(250, 0, 0);//设置线的颜色
9.	mvdRenderActivex1.AddShape(line1);//添加线段1
10.	mvdRenderActivex1.AddShape(line2);//添加线段2
11.	mvdRenderActivex1.Display();//渲染
VM4.2平台SDK 6.3中,控件嵌入的使用主要涉及将VisionMaster应用程序或其部分功能嵌入到用户自定义的软件界面中,通常通过调用Windows API函数如`SetParent`和`MoveWindow`来实现。以下是一个典型的应用场景与实现方式: ### 控件嵌入的基本流程 1. **启动VisionMaster进程** 首先需要通过代码启动VisionMaster应用程序,确保其主窗口句柄可以被获取。可以使用`Process.Start`方法启动程序,并通过`WaitForInputIdle()`方法等待其初始化完成。 2. **获取主窗口句柄** 在VisionMaster启动后,通过`MainWindowHandle`属性获取其主窗口的句柄(`IntPtr`型),这是后续操作的基础。 3. **设置父窗口** 使用`SetParent`函数将VisionMaster的主窗口设置为用户界面中某个Panel控件的子窗口。这样可以将整个VisionMaster界面嵌入到Panel中。 4. **调整窗口大小和位置** 通过`MoveWindow`函数将VisionMaster的主窗口调整至Panel控件的尺寸和位置,确保其在用户界面中正确显示。 ### 示例代码(C#) ```csharp [DllImport("user32.dll", EntryPoint = "SetParent")] public static extern int SetParent(IntPtr hWndChild, IntPtr hWndNewParent); [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int MoveWindow(IntPtr hWnd, int x, int y, int nWidth, int nHeight, bool BRePaint); // 启动VisionMaster进程 Process p = Process.Start(@"D:\VisionMaster4.2.0\Applications\VisionMaster.exe"); // 等待VisionMaster完成初始化 p.WaitForInputIdle(); // 获取主窗口句柄 IntPtr appWin = p.MainWindowHandle; // 将VisionMaster窗口设置为Panel控件的子窗口 SetParent(appWin, panel1.Handle); // 调整VisionMaster窗口大小以适应Panel控件 MoveWindow(appWin, 0, 0, panel1.Width, panel1.Height, true); ``` ### 注意事项 - 在调用`SetParent`之前,确保VisionMaster已经启动并完成初始化,否则可能导致句柄获取失败。 - `MoveWindow`调用后,可能需要根据实际界面布局调整参数,以保证嵌入的窗口显示正确。 - 如果需要在多个Panel中切换显示不同的VisionMaster实例,应确保每个实例的句柄管理清晰,避免冲突。 ### 开发环境要求 - SDK版本:VM4.2平台SDK 6.3 - 开发工具:Visual Studio 2015及以上 - 编程语言:C# 上述实现方式基于SDK提供的功能和Windows API的调用机制,适用于需要将VisionMaster界面深度集成到客户软件中的场景[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值