发明内容
本发明所要解决的技术问题是提供一种获取、编辑自定义图形的方法和一种字幕图形制作系统,用以绘制出满足用户需求的图形,并提高图形绘制的效率。
为了解决上述问题,本发明公开了一种字幕图形制作系统,包括:
制作模块,用于依据当前用户所需的自定义图形,制作插件;所述插件用于提供所需自定义图形的关键点描述和控制点描述,并且该插件继承图形绘制主程序协议层的接口;
调用模块,用于在接收到用户选择的自定义图形时,调用与所述自定义图形相应的插件;
显示模块,用于根据插件中相应的关键点信息和控制点信息,在插件界面绘制显示所述自定义图形;
调整模块,用于在接收到用户对该自定义图形某个控制点的移动信息时,插件重新计算关键点信息,并在完成计算后触发显示模块。
优选的,所述显示模块包括:
调用单元,用于调用系统函数;
绘制显示单元,用于根据插件中相应的关键点信息和控制点信息,将所述自定义图形绘制显示在插件界面。
本发明还公开了一种获取、编辑自定义图形的方法,包括:
制作步骤:依据当前用户所需的自定义图形,制作插件;所述插件用于提供所需自定义图形的关键点描述和控制点描述,并且该插件继承图形绘制主程序协议层的接口;
调用步骤:在接收到用户选择的自定义图形时,调用与所述自定义图形相应的插件;
显示步骤:根据插件中相应的关键点信息和控制点信息,在插件界面绘制显示所述自定义图形;
调整步骤:在接收到用户对该自定义图形某个控制点的移动信息时,插件重新计算关键点信息,并返回显示步骤。
优选的,所述自定义图形为规则图形或不规则图形;以及,所述自定义图形为封闭图形或开放图形。
优选的,所述显示步骤包括:
插件调用系统函数;
系统函数根据插件中相应的关键点信息和控制点信息,将所述自定义图形绘制显示在插件界面。
优选的,所述显示步骤包括:
根据插件中相应的关键点信息和控制点信息,显示所述自定义图形;
点击该自定义图形时,再显示所述自定义图形的各个控制点。
优选的,所述关键点描述包括多个关键点坐标的描述,以及,所述控制点描述包括一个或多个控制点坐标的描述;
所述显示步骤包括:
将当前光标位置作为某个关键点坐标,并根据各个关键点坐标和各个控制点坐标,对该自定义图形进行显示。
与现有技术相比,本发明具有以下优点:
本发明依据当前用户所需的自定义图形,制作插件;所述插件具有包括关键点描述和控制点描述的图形描述、数据通信和截获控制点移动信息的功能,并且能够根据所述截获信息,重新计算关键点信息以及对所述自定义图形进行重新显示;因此,相对于现有技术,用户根本无法绘制一些图形绘制主程序不支持的图形,或者,不得不逐线绘制得到复杂图形,本发明在图形绘制主程序调用制作完成的插件,即可绘制显示出满足用户需求的自定义图形,从而能够提高图形绘制的效率。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
为使本领域技术人员更好地理解本发明,以下简单介绍插件框架的原理。
在应用程序中,常常需要设计一种框架来适应需求的不断变化。经常地,在软件发布之后,用户需要增加新的功能,或者不同的用户需要根据各自特定的需求来定制功能。为了达到这个目的而无需重写代码或者重做“开发——编译—测试—发布”等一系列任务,也即可以实现一种在不破坏现有代码的条件下可扩充模块的框架,而使用插件(plug-in)框架可以满足这一需要。
简单地说,这种插件框架能允许应用程序软件在启动时查找附加的功能模块并将其与该应用程序软件整合。许多应用程序,例如MicrosoftOffice,就使用了类似的技术来允许第三方开发者来对已有的应用程序进行扩展。
本发明的核心构思之一在于,采用插件框架对图形绘制主程序的绘制功能进行扩展,具体而言,在用户对某图形有需求时,可以设计图形绘制主程序的接口,将该接口公开,并根据该接口制作与该图形相应的插件;插件制作完成后,在图形绘制主程序调用该插件即可增加该程序的绘制功能。
参照图1,示出了本发明一种获取、编辑自定义图形的方法实施例1的流程图,具体可以包括:
制作步骤101、依据当前用户所需的自定义图形,制作插件;所述插件用于提供所需自定义图形的关键点描述和控制点描述,并且该插件继承图形绘制主程序协议层的接口;
在具体实现中,一种开发插件框架的示例可以为,使用DLL(动态链接库)来实现插件扩展。当应用程序启动的时候,在预设的目录中查找符合一定规范的DLL文件;查找完成后,应用程序使用约定好的接口调用DLL模块。
相应地,该插件框架的生命周期如下所示:
1.应用程序初始化;
2.在初始化功能函数中在指定的目录中查找插件文件,例如,plug-in目录;
3.对每个查找到的文件,应用程序利用WindowApI函数AfxLoadLibrary()导入到宿主内存后,按规定的加载接口函数如:load()函数进行调用校验,看是否是符合图形插件规则的文件;
4.load()调用之后,应用程序保存每个模块的名字,并对每个模块创建引用,这样,模块中的函数就可以在随后被调用;
5.在应用程序运行的过程中,当用户选择菜单项时,相应的所定义的功能就会被执行;
6.关闭应用程序时,调用卸载unload()函数,用来释放load()函数中所申请的资源。
本发明的插件主要具有以下功能:
A、数据通信功能。继承图形绘制主程序协议层的接口以进行插件与主程序之间的数据通信;
B、图形描述功能。采用关键点和控制点描述,用来实现提供针对用户所需自定义图形的描述功能。
在实际中,所述自定义图形可以为规则图形,如矩形、圆形、五角形等;也可以为不规则图形,如任意多边形、自由曲线等;既可以为封闭图形,也可以为开放图形,本发明对此不加以限制。
参考图2,示出了本发明一种多边形示例,其中,各顶点为各自多边形的关键点,2A为图2(A)三角形的控制点,2B为图2(B)矩形的控制点,2C为图2(C)六边形的控制点;各控制点的位置决定相应多边形的大小和形状。
由于具有简单、快速、变化和设备无关性等优点,本发明可以采用贝塞尔曲线描述所述自定义图形。
贝塞尔(Bezier)曲线是计算机图形学中一种重要的多项式参数曲线,平面中的任意N(N≥2)个点都可以构成一个Bezier曲线,这N个点称为Bezier曲线的节点,所述N个节点组成的多边形称为Bezier曲线的特征多边形。N次Bezier曲线的参数方程表示如下:
其中,Pi表示特征多边形的节点,Bi,n(t)是伯恩斯坦多项式,称为基地函数,可表示如下:
参考图3,示出了一种贝塞尔曲线示例,图中的曲线为由节点连接而成的线段组成的直线或曲线,其中,6个控制点301决定了5条控制线302,并且,每条控制线302和每个控制点301的位置决定曲线段的大小和形状,移动这些因素都将改变曲线的形状。
在制作插件时,可以采用坐标描述所述关键点或者控制点,例如,所述关键点描述可以包括多个关键点坐标的描述,以及,所述控制点描述可以包括一个或多个控制点坐标的描述。对于三角形、矩形等多边形,可以通过各顶点坐标,计算得到相应的控制点坐标;对于Bezier曲线的特征多边形,可依据各节点坐标及N次Bezier曲线的参数方程,计算得到相应的控制点坐标。
调用步骤102、在接收到用户选择的自定义图形时,调用与所述自定义图形相应的插件;
所述调用步骤可以为,在VC环境下,待图形绘制主程序初始化后,首先该主程序的On_Init()函数在指定的目录中查找与所选择的自定义图形相应的DLL文件,例如,plug-in目录,然后该主程序使用LoadLibrary()函数调用该DLL文件。
在调用所选择的自定义图形相应的DLL文件时,还可以指定调用路径,例如,将该自定义图形直接加载到当前程序的图形元素库中,供用户调用;为使该自定义图形与已有的图形元素区别开来,可对其进行特殊命名。
显示步骤103、根据插件中相应的关键点信息和控制点信息,在插件界面绘制显示所述自定义图形;
在实际中,所述显示步骤可以包括:
子步骤A1、插件调用系统函数;
子步骤A2、系统函数根据插件中相应的关键点信息和控制点信息,将所述自定义图形绘制显示在插件界面。
另外,在采用坐标描述所述自定义图形时,所述显示步骤可以为,将当前光标位置作为某个关键点坐标,并根据各个关键点坐标和各个控制点坐标,对该自定义图形进行显示。
可以理解,本领域技术人员还可以根据需要,将当前光标位置作为某个控制点坐标,本发明对此不加以限制。
调整步骤104、在接收到用户对该自定义图形某个控制点的移动信息时,插件重新计算关键点信息,并返回显示步骤103。
在实际中,用户往往会有这样的需求,即希望对当前显示的自定义图形进行编辑操作,例如,移动该图形、改变该图形的大小和形状等。由于制作的插件中描述的各控制点的位置决定了相应图形的位置,以及,大小和形状,因此,用户可以通过移动控制点,来进行相应的编辑操作。
参考图4,示出了一种矩形控制点示例,其中,4A1、4A2、4A3、4A4分别代表上、下、左、右四个边界的拉伸控制点,4B1、4B2、4B3、4B4分别代表左上角、左下角、右下角、右上角的拉伸控制点,4C代表旋转控制点。这样,用户可通过移动4A1-4A4中任意一个控制点来实现四个边界的拉伸,通过移动控制点4B1-4B4中任意一个控制点以对四个角进行拉伸操作,或者,以默认的矩形中心4D为旋转中心,通过移动旋转控制点4C来改变旋转角度,以实现将该矩形进行旋转的目的。
针对上述操作,需要控制窗口提供对插件对应的自定义图形进行修改、编辑的操作,而在某些特定编辑环境下,宿主程序是无法提供合适的窗口的,因此要求插件具有自我编辑的能力,即维护自身的窗口,进行编辑操作。针对该情况,本发明在设计插件时,添加插件钩子,以截获用户对该自定义图形某个控制点的移动信息,也即,本发明的插件还具有截获移动信息的功能。
钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程序以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时,钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。
钩子的设计、
可以针对一个新建的插件,也可以对一个现有的插件进行编辑。具体可以包括如下内容:
钩子名称:在一个插件内,钩子的名称是唯一的,不可重复。名称可以由英文字母、数字和“_”组成,不支持中文,最长255个字符。为了便于理解和记忆钩子的作用,名称应当尽量简洁清晰,能够表述一定的含义。注意:钩子名称对字母大小敏感,例如:Index_start和index_start将视为两个不同的钩子;
钩子类型:由于本发明的钩子是用来截获用户对该自定义图形某个控制点的移动信息的,而所述移动信息是通过键盘和鼠标来实现的;另外,在未选中该自定义图形的情况下,各种键盘消息和鼠标消息是不会引起某个控制点的改变的,因此,本发明的钩子类型可以包括:
低级键盘钩子和高级键盘钩子,用于监视各种键盘消息,其中,低级键盘钩子监视的是未选中自定义图形的情况下的各种键盘消息,高级键盘钩子监视的是选中自定义图形的情况下的各种键盘消息;
低级鼠标钩子和高级鼠标钩子,用于监视各种鼠标消息,其中,低级鼠标钩子监视的是未选中自定义图形的情况下的各种鼠标消息,高级鼠标钩子监视的是选中自定义图形的情况下的各种鼠标消息;
钩子描述:对钩子的详细说明,如功能介绍、调用方法、使用方法等;
代码:这是钩子的核心内容,也是一段代码,需要制作者自行设计,其中这段代码记载的是,完成钩子需要处理的数据或者需要执行的操作;
例如,低级键盘钩子监视的是未选中自定义图形的情况下的各种键盘消息,因此,其对应的代码可以是空操作。
又如,高级鼠标钩子监视的是选中自定义图形的情况下的各种鼠标消息,其反映了某个控制点的移动信息,因此,其对应的代码可以是根据所述移动信息,重新计算关键点信息的操作。
在实际中,所述计算操作可以为,根据所述改变后的控制点坐标,计算得到各个关键点的新坐标。
假设,用户移动了拉伸控制点4A1,由于改变的只是左上关键点和右上关键点的纵坐标,且左上关键点和右上关键点的纵坐标与拉伸控制点4A1的纵坐标相同,因此,各个关键点的新坐标可以很容易得到;又如,用户移动了拉伸控制点4B1,由于改变的只是左上关键点、左下关键点以及右上关键点的纵坐标,且左上关键点和左下关键点的横坐标与拉伸控制点4B1的横坐标相同,以及,左上关键点和右上关键点的纵坐标与拉伸控制点4B1的纵坐标相同,故也可得到各个关键点的新坐标;再如,用户移动了选择控制点4C,无论矩形如何旋转,矩形的中心坐标是不会发生改变的,并且,旋转前后的关键点到中心的距离是不变的,因此,可以首先根据中心坐标及改变前后的控制点坐标计算出该矩形的旋转角度,然后,依据所述旋转角度及改变前的关键点坐标,求解出新坐标。
对于Bezier曲线的特征多边形,其各个关键点的新坐标获取过程与上述过程类似,在此不作赘述。
可用:每个插件允许有多个钩子,可以自由选择关闭或者开启某个钩子。
钩子的安放、
钩子设计完成以后,需要在相应的插件程序中安放钩子,不同钩子由于作用的不同,放置的位置也是不同的。安放钩子,仅需将钩子的调用代码放入即可。
钩子的调用、
钩子监视的特定事件(各种键盘、鼠标消息事件)发生后,系统会调用相应的钩子代码进行处理。
因此,相对于现有技术,用户根本无法绘制一些图形绘制主程序不支持的图形,或者,不得不逐线绘制得到复杂图形,本发明在用户对某图形有需求时,可以制作与该图形相应的插件,然后,在图形绘制主程序调用制作完成的插件,即可绘制出满足用户需求的图形,从而能够提高图形绘制的效率。
参照图5,示出了本发明一种获取、编辑自定义图形的方法实施例2的流程图,具体可以包括:
制作步骤501、依据当前用户所需的自定义图形,制作插件;所述插件用于提供所需自定义图形的关键点描述和控制点描述,并且该插件继承图形绘制主程序协议层的接口;
调用步骤502、在接收到用户选择的自定义图形时,调用与所述自定义图形相应的插件;
显示步骤503、根据插件中相应的关键点信息和控制点信息,在插件界面绘制显示所述自定义图形,具体可以包括:
自定义图形显示子步骤531、根据插件中相应的关键点信息和控制点信息,显示所述自定义图形;
控制点显示子步骤532、点击该自定义图形时,再显示所述自定义图形的各个控制点;
调整步骤504、在接收到用户对该自定义图形某个控制点的移动信息时,插件重新计算关键点信息,并返回显示步骤503。
本实施例与实施例1的区别在于,采用选中才显示控制点的显示方式,也即,先显示该自定义图形,然后在用户选中该图形时,才会显示各个控制点。
在具体实现中,可以在插件中设计一个事件钩子,用以捕获用户对该自定义图形的选中事件,其中,该事件钩子的代码可以为该自定义图形中每个控制点的显示操作代码。
可以理解,显示步骤503还可以在显示该自定义图形的同时,显示各个控制点,本发明对此不加以限制。
对于实施例2而言,由于其与图1所示的实施例1基本相似,所以描述的比较简单,相关之处参见实施例1的部分说明即可。
参照图6,示出了本发明一种字幕图形制作系统实施例的结构图,具体可以包括:
制作模块601,用于依据当前用户所需的自定义图形,制作插件;所述插件用于提供所需自定义图形的关键点描述和控制点描述,并且该插件继承图形绘制主程序协议层的接口;
调用模块602,用于在接收到用户选择的自定义图形时,调用与所述自定义图形相应的插件;
显示模块603,用于根据插件中相应的关键点信息和控制点信息,在插件界面绘制显示所述自定义图形;
显示模块603可以进一步包括:
调用单元,用于调用系统函数;
绘制显示单元,用于根据插件中相应的关键点信息和控制点信息,将所述自定义图形绘制显示在插件界面。
调整模块604,用于在接收到用户对该自定义图形某个控制点的移动信息时,插件重新计算关键点信息,并在完成计算后触发显示模块603。
在具体实现中,可以先显示该自定义图形,然后在用户选中该图形时,才会显示各个控制点。相应地,在本发明的一种优选实施例中,显示模块603的结构可以为:
自定义图形显示单元,用于根据插件中相应的关键点信息和控制点信息,显示所述自定义图形;
控制点显示单元,用于在点击该自定义图形时,显示所述自定义图形的各个控制点。
对于系统实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本发明可以应用于图文制作、平面设计、影视后期制作等领域,用以增加现有图形制作系统的图形绘制功能。
以上对本发明所提供的一种获取、编辑自定义图形的方法和一种字幕图形制作系统,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。