【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
前面我们说过,qmacvisual本身支持52个控件,但是指望这52个控件可以cover所有的应用场景,这也不太现实。另外,后续随着技术的发展,肯定还会有一些新的算法被提出来,所以上位机一定要提供一种算法扩展的机制,这样才能方便后面项目的实施。
一开始的时候,我以为直接按照之前52种控件编写的方法,去模仿和参考别人的代码就可以了。后来通过代码阅读才发现,作者提供了一种套娃的方式来实现的。可能不这样做的话,直接按照那52种控件修改和展示,需要修改很多地方的代码,比较容易出错。所以他这边的处理方法就是先拖入一个控件的容器,然后在这个容器里面配置好我们写的控件。
1、容器控件
容器控件的位置位于【逻辑工具】-》【扩展库】当中。如果需要使用的话,肯定和之前一样,先创建项目,再创建流程。这一切都ok之后,就可以把容器控件拖过来。单击之后,不出意外的话,窗口的界面是这样的,
2、容器控件分析
如上图所示,整个控件有两个部分。一个是输入图像,也就是需要处理的图像从哪里进行输入;还有一个是动态库的存储路径,也就是后续我们需要自己编写的插件。容器控件是qmacvisual自带的,不需要我们写代码。
3、自己编写插件
关于自己编写的插件,qmacvisual给出了一个模板,生成的dll文件就是上面截图种看到的ExtLibraryCase.dll。大家如果需要自己开发的话,直接看这个template模板就可以了。不想做特别大的修改,可以直接把它改个工程的名字,换一下核心部分的算法就行了。插件的结果输出也是一幅图像。还有,如果想看ExtLibraryCase.dll的界面效果,直接单击上面窗口中的设置按钮即可。不出意外,应该就可以看到这样的窗口,
4、插件内容分析
和其他插件相比较,这个ExtLibraryCase.dll显示部分还是比较空的。大家可以根据需要,在窗口里面添加对应的小控件就可以了。需要显示效果,直接把输出图像显示在后侧的windows里面就行。当然仔细分析一下,作者之所以大费周章,采用了这种套娃的方法来实现插件的功能,大概是希望用户不要修改原来代码的内容。因为每个人的开发能力是有差异。不然的话,很容易出现这种情况,那就是软件改着改着就改出毛病来了。
5、实现方法
这种动态插件加载的方法,不管是windows平台,还是linux平台,原理都是一样的。不同的插件,自身都包含了相同的函数入口,直接加载对应函数入口就可以了。在widnows平台上面,加载函数叫LoadLibraryA;在linux平台,称之为dlopen。有兴趣的同学可以通过搜索引擎或者是chatgpt,去好好看一下对应的功能是怎么实现的。