论文部分内容阅读
[摘要] 在因特网上,有些图片是支持IE的,而有些是不支持IE的。对于那些不支持IE的图片格式,用户无法实现适时的网络传输。控件作为一种基于Windows平台的软件技术,恰好能满足用户的这种需求。本文介绍了简要ActiveX控件的制作过程。
[关键词] 图像处理 ActiveX VBScript
1.ActiveX概述
ActiveX是Microsoft推出的由OLE(Object Linking and Embedding)蜕变出来的网络新技术,它的出现对Internet网络技术有一个不小的震撼。ActiveX提供了卓越的功能,它结束了Java在Internet网络技术上独领风骚的局面,使ActiveX与Java在网络技术上平分秋色。ActiveX是建立在COM基础上的,它是精简的OLE加上网络支持,动态地处理信息的对象。COM制定对象的存储表示和操作方法,是ActiveX技术的基本结构,OLE提供对象间交互的主从结构,ActiveX能提供网络层次的3项支持:脚本撰写(ActiveX Scripting)、控件(ActiveX Controls)、以及威力文档(ActiveX Documents)。ActiveX不但能够应用在信息网的网页上,而且可以应用于各种程序语言中,ActiveX使元件软件(Component Ware)的概念在网络上得以实现。
要加强网页的交互功能,需要元件与脚本的支持,Navigator提供的是Applet, Explorer提供的是ActiveX控件与Applet。ActiveX控件与Applet是作为相对独立的元件出现的,元件就象在浏览器中执行的小程序,它是由浏览器中的虚拟机器来解释执行的。Microsoft采用VBScript作为ActiveX的脚本语言,用VBScript脚本语言可以把ActiveX控件加入到HTML网页中。
可以用不同的方式为浏览器编写程序,使用Script语言是比较简捷的方法,JavaScript,VBScript是目前网络时髦的Script语言。VBScript是基于对象的语言,没有类和继承的功能,语法类似于Visual Basic,语言平易近人,简单易学。嵌入在HTML中的VBScript目的在于动态地处理HTML里的各种对象,如ActiveX控件,Javaapplets和forms等。VBScript加入ActiveX控件使网页活起来。HTML、VBScript和浏览器的关系如图1所示。
图1 HTML,VBScript和浏览器的关系
2.ActiveX控件的设计与实现
只要支持COM并且和OLE相容的语言,如VC++,Java,VisualBasic,Delphi语言,都能够用于设计ActiveX控件。
利用VisualBasic5.0的VBCCE可以设计ActiveX控件,设计简单方便,用VBCCE设计ActiveX是由UserControl对象加上各式各样的基本控件总和而成,设计ActiveX控件就是设计对象的外观,然后加上程序码模块,编写ActiveX控件的对象方法、对象属性以及事件处理过程。
设计ActiveX控件有3种不同方法:
·从头设计简单的控件;
·将原有的基本控件功能增强,添加属性、事件和方法;
·组合基本控件使其达到最佳的功能。
用VBCCE设计ActiveX控件的文件名为.ctl,存放图象文件为.ctx,.ctl和.ctx两者可以完整地描述ActiveX控件的外观和界面(属性、方法和事件),编译后为.ocx文件,即ActiveX控件。ActiveX控件的制作过程如图2所示。
图2 Activex的制作过程
Visual C++6. 0提供了两种开发控件的方式,ATL COM AppWizard和MFC ActiveX ControlWizard。这里采用MFC的方式。首先描述一下该控件的开发目标:该控件类似于VisualBasi。中的Picture Box控件,可以显示BMP位图文件,根据BMP文件的大小来自动缩放等功能。同时这个控件具有将24位真彩图转化为256级灰度图、对灰度图进行平滑、保存灰度图为BMP位图等简单功能。
使用MFC ActiveX ControlWizard生成一个新的工程,取名为ImageProcess。这时CIassWizard自动生成三个类ClmageProcessCtrl,ClmagePmcessPropPage和CImageProcesaApp。其中CImageProcessCtrl是ActiveX控件类,CImageProcesePropPage是这个控件对应的属性页类,CImageProcessApp类具有控件模板初始化的功能。一般情况对CImageProcessApp类不需要做大的改动。
2.1 填加CImageProceasCtrl类成员变量
使用CIasaWizard为ClmageProceasCtrl类琪加如下成员变及,且都为Private.
LPBYTE m_lp241mgBits;//真彩色数据指针
LPBYTE m_lp8lmgBits; / /8位图数据指针
long m_lngWidth;//图像宽
long m_lngHeight;//图像高
Tong m_lng24WidthBytes;//宽对齐后的字节数
long m_lngBWidthBytes;
unsigned long m_ulng24BitsCount;//图像数据数
unsigned long m_ulngBBitsCount;
LPBYTE m_lpBMPFiIeData; /!BMP文件数据
LPBYTE m_1p81mgBitsMove;//移动指针
LPBYTE m_lp241mgBitsMove;
HANDLE m_h81mgDIB;//DIB数据句柄
2.2 填加控件属性
使用CIasaWizard的Automation页面中的Add property为CImageProceaeCtrl类填加属性。填加Appearan。这个Stock属性。并在ClmageProcessCtrl::DoPropExchange()中增加一行代码。PX Short(pPX, T("Appearance一)m sAppearance, 1);这行代码的作用是设置控件的初始外观特性是三维效果。
增加BackColor属性,这个属性同样是库存属性。在后面的OnDraw)函数中将使用这个属性,如果控件中没有图像数据的时候就根据BackColor属性所设定的颜色值绘制背景颜色。
2.3 填加控件事件
使用C1aesWizard的ActiveX Event页面中的Add Event为CImageProcessCtrl类填加事件。
填加Click和DblClick这两个Stock类型的事件。这样这个控件在ActiveX容器里就可以响应鼠标单击和双击事件。
2.4 填加控件方法
使用CIassWizard的Automation页面中的Add Method为CImageProcessCtrl类填加方法。
首先填加Clear()方法,该方法用来清除控件中的数据,恢复原始状态。填加时,把External Name设为Clear,这是控件对外映射的方法的名称;把Internal Name设为Clear,这是此方法在ClmageProceseCtrl类内部的名称。这样做是为了将方法所对应的函数与普通的类的成员函数区分开来。
然后填加ReadBMPFiIe()方法,该方法用来读取BMP位图文件。注意ReadBMPFiIe()的参数LPCTSTR atrFileName也要通过Add Method对话框中的Parameter list来填加。下面代码仅仅实现读取24位真彩色的BMP图,其他格式图像文件的读取读者可以自行增加。关于位图文件格式的详细讨论请读者参照相关资料,这里不再赞述。
控件的所有方法已经增加完毕,接下来要修改和增加CImageProceasCtrl类的一些成员函数,达到辅助图像显示、安全操作内存等功能。
2.5 修改和填加控件成员函数
首先在CImageProcessCtrl的构造函数中填加如下代码:
m_lpBMPFiIeData=NULL;
m_lp241mgBits=NULL;
m_lpBlmgBits=NULL;
m_h81mgDIB=NULL;
然后在析构函数中调用一leer()函数,控件中所有的保存图像数据的内存空间都是通过new运算符分配的,所以在析构函数中一定要delete掉,否则会造成内存泄露。
增加成员函数Create256DIB ( ),该函数将一段纯图像数据转为256级灰度的DIB数据,并且返回这段DIB数据的句柄。
随后增加ShowDI13_vfw()函数,该函数使用VFW ( Vide For函数来进行DIB数据的显示。这时要#include "vfw.h",而且增加Vfw32. lib到工程中,才能正确使用vfw函数。
图3.3图象处理控件的编码制作流程
在OnDraw)函数里姗除原来狱认的代码,垠加如下显示代码。这样控件就会根据其中的图像数据来显示不同的图片。当读人24位真彩色图的时候控件显示真彩色图像,进行灰度变化后则显示灰度图像。当没有图像数据时,控件根据前文中填加的BackColor属性来显示背景色。
这样一个简单功能的图像处理控件的整个编码就全部结束了。在HTML页面中使用ActiveX控件包含三个基本操作:将控件放入HTML中;将该控件下载给用户;在用户机器上安装该控件。如果只是针对IE用户,在HTML中插入ActiveX控件就比较简单;如果同时兼顾IE和Netscape用户,则要做更多工作。大家知道,HTML文件由文本和各种标志(tags)组成,ActiveX控件对于IE在HTML中的标志是<OBJECT>,该标记有几个重要的参数特性,它们是:
1)ID:为控件提供一个标识名称,为HTML代码提供一种访问该控件的方式。
2)CLASSID:是该控件唯一的UUID,告诉IE装入哪个对象。如果使用已经开发好的控件,它的CLASSID可以通过调用Win95或NT下的应用Regedit来查找。从开始菜单中运行该程序,展开HKEY_CLASSES_ROOT项,可以看到按字母顺序排列的注册表,找到需要使用的控件名,例如WClnt,展开时可看到一个CLSID文件夹,里面就是该控件的CLASSID。 如果是自己用VC开发控件,该UUID可以在ActiveX控件项目中的ODL(对象描述库)文件中找到;通过查看控件的类信息注释来定位特定控件的UUID。
3)CODEBASE:如果在用户机器上没有控件的当前版本,该参数告诉用户浏览器在哪里可找到要下载的控件和最新版本号。当控件作了修改后,可以更改版本号强制用户重新下载。
4)PARAM:该标记用于设置控件的初始属性值,它有两个特性:Name和Value,即属性名称和属性值。
此外还有一些标记,如:Width表示该控件所占的宽度,Height表示高度等,总体来说这样一个插入控件的HTML代码和插入Java Applet的HTML代码非常相似。
3.结束语
读者可以根据自己的需要增加若干的图像处理的功能,如灰度线性变换、中值滤波、边缘检测等等。读者也可以自己建立一个Visual Basic工程或Delphi工程,将编译生成的ImageProcess. ocx控件引用到工程里。只需要简单调用控件的方法,就可以完成快速的图像处理的操作。
参考文献:
[1] 王传华多媒体网页制作技术教程 清华大学出版社.
[2] 林福宗 图像文件格式(上)-Windows编程 清华大学出版社.
[3] 何斌,马天予,王运建VisualC++数字图像处理(第二版)人民邮电出版社.
[4] Taubman D. High Performance Scalable Image Compression With EBCOT, Proc IEEE, Int Conference Image Processing, Vol, 343-3891.
[5] Rinaldo R. Calvago G. Hibird vector quantization for multiresolution image coding〔J〕. IEEE Trans. on Image Processing, 1997, 6 (5):753~ 758.
“本文中所涉及到的图表、公式、注解等请以PDF格式阅读”
[关键词] 图像处理 ActiveX VBScript
1.ActiveX概述
ActiveX是Microsoft推出的由OLE(Object Linking and Embedding)蜕变出来的网络新技术,它的出现对Internet网络技术有一个不小的震撼。ActiveX提供了卓越的功能,它结束了Java在Internet网络技术上独领风骚的局面,使ActiveX与Java在网络技术上平分秋色。ActiveX是建立在COM基础上的,它是精简的OLE加上网络支持,动态地处理信息的对象。COM制定对象的存储表示和操作方法,是ActiveX技术的基本结构,OLE提供对象间交互的主从结构,ActiveX能提供网络层次的3项支持:脚本撰写(ActiveX Scripting)、控件(ActiveX Controls)、以及威力文档(ActiveX Documents)。ActiveX不但能够应用在信息网的网页上,而且可以应用于各种程序语言中,ActiveX使元件软件(Component Ware)的概念在网络上得以实现。
要加强网页的交互功能,需要元件与脚本的支持,Navigator提供的是Applet, Explorer提供的是ActiveX控件与Applet。ActiveX控件与Applet是作为相对独立的元件出现的,元件就象在浏览器中执行的小程序,它是由浏览器中的虚拟机器来解释执行的。Microsoft采用VBScript作为ActiveX的脚本语言,用VBScript脚本语言可以把ActiveX控件加入到HTML网页中。
可以用不同的方式为浏览器编写程序,使用Script语言是比较简捷的方法,JavaScript,VBScript是目前网络时髦的Script语言。VBScript是基于对象的语言,没有类和继承的功能,语法类似于Visual Basic,语言平易近人,简单易学。嵌入在HTML中的VBScript目的在于动态地处理HTML里的各种对象,如ActiveX控件,Javaapplets和forms等。VBScript加入ActiveX控件使网页活起来。HTML、VBScript和浏览器的关系如图1所示。
图1 HTML,VBScript和浏览器的关系
2.ActiveX控件的设计与实现
只要支持COM并且和OLE相容的语言,如VC++,Java,VisualBasic,Delphi语言,都能够用于设计ActiveX控件。
利用VisualBasic5.0的VBCCE可以设计ActiveX控件,设计简单方便,用VBCCE设计ActiveX是由UserControl对象加上各式各样的基本控件总和而成,设计ActiveX控件就是设计对象的外观,然后加上程序码模块,编写ActiveX控件的对象方法、对象属性以及事件处理过程。
设计ActiveX控件有3种不同方法:
·从头设计简单的控件;
·将原有的基本控件功能增强,添加属性、事件和方法;
·组合基本控件使其达到最佳的功能。
用VBCCE设计ActiveX控件的文件名为.ctl,存放图象文件为.ctx,.ctl和.ctx两者可以完整地描述ActiveX控件的外观和界面(属性、方法和事件),编译后为.ocx文件,即ActiveX控件。ActiveX控件的制作过程如图2所示。
图2 Activex的制作过程
Visual C++6. 0提供了两种开发控件的方式,ATL COM AppWizard和MFC ActiveX ControlWizard。这里采用MFC的方式。首先描述一下该控件的开发目标:该控件类似于VisualBasi。中的Picture Box控件,可以显示BMP位图文件,根据BMP文件的大小来自动缩放等功能。同时这个控件具有将24位真彩图转化为256级灰度图、对灰度图进行平滑、保存灰度图为BMP位图等简单功能。
使用MFC ActiveX ControlWizard生成一个新的工程,取名为ImageProcess。这时CIassWizard自动生成三个类ClmageProcessCtrl,ClmagePmcessPropPage和CImageProcesaApp。其中CImageProcessCtrl是ActiveX控件类,CImageProcesePropPage是这个控件对应的属性页类,CImageProcessApp类具有控件模板初始化的功能。一般情况对CImageProcessApp类不需要做大的改动。
2.1 填加CImageProceasCtrl类成员变量
使用CIasaWizard为ClmageProceasCtrl类琪加如下成员变及,且都为Private.
LPBYTE m_lp241mgBits;//真彩色数据指针
LPBYTE m_lp8lmgBits; / /8位图数据指针
long m_lngWidth;//图像宽
long m_lngHeight;//图像高
Tong m_lng24WidthBytes;//宽对齐后的字节数
long m_lngBWidthBytes;
unsigned long m_ulng24BitsCount;//图像数据数
unsigned long m_ulngBBitsCount;
LPBYTE m_lpBMPFiIeData; /!BMP文件数据
LPBYTE m_1p81mgBitsMove;//移动指针
LPBYTE m_lp241mgBitsMove;
HANDLE m_h81mgDIB;//DIB数据句柄
2.2 填加控件属性
使用CIasaWizard的Automation页面中的Add property为CImageProceaeCtrl类填加属性。填加Appearan。这个Stock属性。并在ClmageProcessCtrl::DoPropExchange()中增加一行代码。PX Short(pPX, T("Appearance一)m sAppearance, 1);这行代码的作用是设置控件的初始外观特性是三维效果。
增加BackColor属性,这个属性同样是库存属性。在后面的OnDraw)函数中将使用这个属性,如果控件中没有图像数据的时候就根据BackColor属性所设定的颜色值绘制背景颜色。
2.3 填加控件事件
使用C1aesWizard的ActiveX Event页面中的Add Event为CImageProcessCtrl类填加事件。
填加Click和DblClick这两个Stock类型的事件。这样这个控件在ActiveX容器里就可以响应鼠标单击和双击事件。
2.4 填加控件方法
使用CIassWizard的Automation页面中的Add Method为CImageProcessCtrl类填加方法。
首先填加Clear()方法,该方法用来清除控件中的数据,恢复原始状态。填加时,把External Name设为Clear,这是控件对外映射的方法的名称;把Internal Name设为Clear,这是此方法在ClmageProceseCtrl类内部的名称。这样做是为了将方法所对应的函数与普通的类的成员函数区分开来。
然后填加ReadBMPFiIe()方法,该方法用来读取BMP位图文件。注意ReadBMPFiIe()的参数LPCTSTR atrFileName也要通过Add Method对话框中的Parameter list来填加。下面代码仅仅实现读取24位真彩色的BMP图,其他格式图像文件的读取读者可以自行增加。关于位图文件格式的详细讨论请读者参照相关资料,这里不再赞述。
控件的所有方法已经增加完毕,接下来要修改和增加CImageProceasCtrl类的一些成员函数,达到辅助图像显示、安全操作内存等功能。
2.5 修改和填加控件成员函数
首先在CImageProcessCtrl的构造函数中填加如下代码:
m_lpBMPFiIeData=NULL;
m_lp241mgBits=NULL;
m_lpBlmgBits=NULL;
m_h81mgDIB=NULL;
然后在析构函数中调用一leer()函数,控件中所有的保存图像数据的内存空间都是通过new运算符分配的,所以在析构函数中一定要delete掉,否则会造成内存泄露。
增加成员函数Create256DIB ( ),该函数将一段纯图像数据转为256级灰度的DIB数据,并且返回这段DIB数据的句柄。
随后增加ShowDI13_vfw()函数,该函数使用VFW ( Vide For函数来进行DIB数据的显示。这时要#include "vfw.h",而且增加Vfw32. lib到工程中,才能正确使用vfw函数。
图3.3图象处理控件的编码制作流程
在OnDraw)函数里姗除原来狱认的代码,垠加如下显示代码。这样控件就会根据其中的图像数据来显示不同的图片。当读人24位真彩色图的时候控件显示真彩色图像,进行灰度变化后则显示灰度图像。当没有图像数据时,控件根据前文中填加的BackColor属性来显示背景色。
这样一个简单功能的图像处理控件的整个编码就全部结束了。在HTML页面中使用ActiveX控件包含三个基本操作:将控件放入HTML中;将该控件下载给用户;在用户机器上安装该控件。如果只是针对IE用户,在HTML中插入ActiveX控件就比较简单;如果同时兼顾IE和Netscape用户,则要做更多工作。大家知道,HTML文件由文本和各种标志(tags)组成,ActiveX控件对于IE在HTML中的标志是<OBJECT>,该标记有几个重要的参数特性,它们是:
1)ID:为控件提供一个标识名称,为HTML代码提供一种访问该控件的方式。
2)CLASSID:是该控件唯一的UUID,告诉IE装入哪个对象。如果使用已经开发好的控件,它的CLASSID可以通过调用Win95或NT下的应用Regedit来查找。从开始菜单中运行该程序,展开HKEY_CLASSES_ROOT项,可以看到按字母顺序排列的注册表,找到需要使用的控件名,例如WClnt,展开时可看到一个CLSID文件夹,里面就是该控件的CLASSID。 如果是自己用VC开发控件,该UUID可以在ActiveX控件项目中的ODL(对象描述库)文件中找到;通过查看控件的类信息注释来定位特定控件的UUID。
3)CODEBASE:如果在用户机器上没有控件的当前版本,该参数告诉用户浏览器在哪里可找到要下载的控件和最新版本号。当控件作了修改后,可以更改版本号强制用户重新下载。
4)PARAM:该标记用于设置控件的初始属性值,它有两个特性:Name和Value,即属性名称和属性值。
此外还有一些标记,如:Width表示该控件所占的宽度,Height表示高度等,总体来说这样一个插入控件的HTML代码和插入Java Applet的HTML代码非常相似。
3.结束语
读者可以根据自己的需要增加若干的图像处理的功能,如灰度线性变换、中值滤波、边缘检测等等。读者也可以自己建立一个Visual Basic工程或Delphi工程,将编译生成的ImageProcess. ocx控件引用到工程里。只需要简单调用控件的方法,就可以完成快速的图像处理的操作。
参考文献:
[1] 王传华多媒体网页制作技术教程 清华大学出版社.
[2] 林福宗 图像文件格式(上)-Windows编程 清华大学出版社.
[3] 何斌,马天予,王运建VisualC++数字图像处理(第二版)人民邮电出版社.
[4] Taubman D. High Performance Scalable Image Compression With EBCOT, Proc IEEE, Int Conference Image Processing, Vol, 343-3891.
[5] Rinaldo R. Calvago G. Hibird vector quantization for multiresolution image coding〔J〕. IEEE Trans. on Image Processing, 1997, 6 (5):753~ 758.
“本文中所涉及到的图表、公式、注解等请以PDF格式阅读”