![基于VB与VC编程技术的位图图像处理系统的开发.doc_第1页](http://file.renrendoc.com/FileRoot1/2019-12/18/f75bc50e-7220-4aad-8eea-0b1b1b3cfa19/f75bc50e-7220-4aad-8eea-0b1b1b3cfa191.gif)
![基于VB与VC编程技术的位图图像处理系统的开发.doc_第2页](http://file.renrendoc.com/FileRoot1/2019-12/18/f75bc50e-7220-4aad-8eea-0b1b1b3cfa19/f75bc50e-7220-4aad-8eea-0b1b1b3cfa192.gif)
![基于VB与VC编程技术的位图图像处理系统的开发.doc_第3页](http://file.renrendoc.com/FileRoot1/2019-12/18/f75bc50e-7220-4aad-8eea-0b1b1b3cfa19/f75bc50e-7220-4aad-8eea-0b1b1b3cfa193.gif)
![基于VB与VC编程技术的位图图像处理系统的开发.doc_第4页](http://file.renrendoc.com/FileRoot1/2019-12/18/f75bc50e-7220-4aad-8eea-0b1b1b3cfa19/f75bc50e-7220-4aad-8eea-0b1b1b3cfa194.gif)
免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于VB与VC编程技术的位图图像处理系统的开发 摘要 结合VB与VC编程技术的优点,可开发出快速、高效的位图图像处理系统。介绍了在VB中通过调用API函数快速获取位图图像像素信息和显示位图图像的方法,说明了VC中编写DLL及在VB中调用的过程。关键词 VB,VC,DLL, API函数Development Of Bitmap Graphics Processing System Based ON Programming Technology Of VB and VCAbstract IT can develop Bitmap Graphics processing system rapidly and efficiently that combines the advantage of programming technology with VB and VC. The paper introduces the method of obtaining information of Bitmaps pixels and displaying Bitmap Graphics, through calling of Windows API function in VB, explains the process of DLL programming in VC and calling in VB.Key words VB, VC, DLL, API function 1、 引言位图图像又称点阵图像,是由许多不同颜色的点组成的,这些点被称为像素。在计算机处理位图时,需要进行大量的数值计算,像素越高,分辩率越高,计算量就越大,图像处理的速度就越慢。以在图像处理中常用的模板处理为例,对于一幅模板为N*N的图像,就要进行9(N-2)2次乘法,8(N-2)2次加法操作,算法复杂度为O(N2),运算量非常之大。鉴于此,笔者认为可利用VB与VC编程技术上各自的优点来开发出一种快速、高效的位图图像处理系统。VB在界面编程中具有所见即所得的优势,且编程快速、简单,但代码运行较慢。VC编写的程序,编译后代码的执行速度比VB快,但编程较为复杂。因此,位图图像处理系统的开发,对于系统界面等不涉及大量数值计算的程序可利用VB的优势来编程,对于位图图像处理等涉及大量数值计算的程序可利用VC的优势来编程。可采用在VB中调用VC编写的DLL(动态链接库)的方法,就能实现VB与VC的优化组合,这样开发出的位图图像处理系统不仅能提高编程的效率,同时也能保证处理位图图像速度。以下介绍开发过程:2、 VB中调用DLL的实现DLL(Windows API是一种典型的DLL库)是一种包含了一些函数和例程的可执行文件,其本身并不能单独运行,但可为其它应用程序提供服务。在VB中调用DLL时,必须首先告诉VB如何正确地向DLL例程传递函数,可使用Declare语句对DLL中的例程进行声明,Declare语句的语结构有如下两种:Public/Private Declare Sub name Lib “libname” Alias “aliasname” (arghlist)Public/Private Declare Function name Lib “libname” Alias “aliasname” (arghlist) as type如果一个DLL过程没有返回值,就应该被声明为子过程的形式,即采用前一种语法结构;如果一个DLL过程返回了一个可用于表达式的值,则应被声明为函数的形式,即采用后一种语法结构。在类模块或窗体模块中的DLL过程只能被声明为Private,并只能在模块中使用。在标准模块中,只能声明为Public,且这个DLL过程能为工程中所有的模块访问。其中name指明了过程名,其命名需遵循VB命名规则。Lib子句指明了包含所声明过程的动态链接库或代码资源,该动态链接库或代码资源由libname指定,如果后缀名为“.dll”,则可以省略。如果libname没有指定路径名,VB会按如下规则进行搜索:.exe文件所在目录。当前目录。Windows系统目录。Windows目录。Path环境变量中的目录。VB在传递参数时有两种方式,按值的方式(Byval)和按引用的方式(ByRef)传递。按值的方式传递时,传递的实际上是变量的一个副本,接受该参数的过程所作的改变只针对该副本,不会影响变量本身。按引用的方式传递是VB6的默认方式。在这种方式中,实际上传递的并不是变量的值,而是指向这个变量的32位地址。所调用的过程根据这个地址来获取变量的实际值。这样过程可以通过对地址中的值的修改来达到永久修改参数原有值的目的。C/C+的数据类型与VB的数据类型并不相同。在VB中调用C 或C+编写的DLL,需要知道两者数据类型之间的对应关系,如表1所示。当然,并不是两者之间所有的数据类型都能找到对应关系。声明了过程后,就可以使用该过程名name访问该过程。表1 C中数据类型与声明DLL过程所用参数格式的对应关系C中的数据类型VB里Declare中使用的参数声明格式C中的数据类型VB里Declare中使用的参数声明格式BOOLByVal variable as longBYTEByVal variable as byteCHARByVal variable as byteDWORDByVal variable as longHWND,HDC等Windows句柄ByVal variable as longINT,UNITByVal variable as longLONGByVal variable as longLPDWORDByVal variable as longLPINT,LPUNITByVal variable as longLPVOIDByVal variable as anyNULLAs any 或ByVal variable as longSHORTByVal variable as IntegerWORDByVal variable as IntegerLPWORDByVal variable as Integer3、 VB中获取位图的像素信息和显示位图的实现为了在VB中快速地获取像素信息和显示位图,需要使用三个API函数。可以利用API函数GetObject获取位图格式信息;用GetBitmapBits获取位图的像素信息;用SetBitmapBits将像素信息返回给位图并显示出来。31 GetObject函数在VB中的声明如下:Public/Private Declare Function GetObject Lib “gdi32” Alias “GetObjectA” (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As LonghObject是图像对象(位图、画笔、刷子、字体、调色板等)的句柄,nCount是接受对应图像对象信息的结构的字节数,lpObject是指向接受对应图像信息的结构的指针。如果是位图,hObject是位图的句柄,而接受图像信息的结构为BITMAP,其定义如下:Public/Private Type BITMAP 14 bytesbmType As LongbmWidth As LongbmHeight As LongbmWidthBytes As LongbmPlanes As IntegerbmBitsPixel As IntegerbmBits As LongEnd Type其中BmType指明了位图的类型,这个值必须是0;bmWidth代表位图以像素为单位的图像宽度;bmHeight代表位图以像素为单位的图像高度;bmWidthBytes指明了每个扫描行的字节数(即以字节为单位的图像宽度),这个值必须可被2整除;bmPlanes代表图像的颜色面数;bmBitsPixel指明每个像素用几位数据来表示(8,16,24,32);bmBits是指向图像数据的指针。32 GetBitmapBits和SetBitmpBits分别用于从位图中获取图像中的像素信息和把像素信息返回给位图。两者在VB中的声明如下:Public/Private Declare Function GetBitmapBits Lib “gdi32”Alias “GetBitmapBits” (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As LongPublic/Private Declare Function SetBitmapBits Lib “gdi32”Alias “SetBitmapBits” (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long其中hbitmap是位图的句柄,dwCount是图像信息的大小,lpBits是保存图像信息的地址。33 三个API函数的用法。首先新建一个VB工程,在其中添加一个Picture Box控件Picture1,在其中加载一幅图片。然后分别声明以上三个API函数和BITMAP类型。最后添加下面的代码。Dim Besult As Long, totbytes As LongDim bmp As BITMAPDim lmgArray() As ByteResult=GetObject(Picture1.Picture.handle, Len(bmp), bmp) 获取位图图像格式信息totbytes=bmp.bmWidthBytes*bmp.bmHeight 总共要多多少个Byte来存图ReDim lmgArray(totbytes)Result=GetBitmapBits(Picture1.Picture.handle, totbytes,lmgArray(0) 获得图片像素信息在这里加入对图像像素数据进行处理的程序Call SetBitmapBits(Picture1.Picture.handle, totbytes,lmgArray(0) 显示处理结果Picture1.Refresh4、 VC中编写DLL,供VB中调用为了在VC编写的动态链接库中处理图像像素,需要VB把获取的位图图像像素信息传送给DLL。上文,已经介绍了获取像素信息的方法,这里说明的是把存有像素信息的数组传送给DLL。由于数值型的数组在VB中其数据是连续存放的,而在C/C+中数组可以等价于指向数组第1个元素的指针。那么可以用引用的方式把VB中数组的第1个元素的地址传给VC编写的DLL,在DLL中用一个指针来接收,这样就达到了传递数组的目的。至于从DLL传递数组给VB,方法相同,只不过过程相反而已。注意在这个过程中VB和VC中的数据类型一定要对应的。同时,因为在C/C+中并不检查数组的界限,需要告诉DLL数组的大小。下面以对灰度图像进行锐化为例说明编写和调用DLL的一般方法。先在VC中选择新建一个MFC AppWizard(dll)项目,取名为Mydll,并接受下面的选项的默认设置。接着在Globals项下添加一个新过程Myfunc,其定义如下:void_stdcall Myfunc(LPVOID PicArray, long PicHeight, long PicWidth) /PicArray是接受数组的指针,PicHeight和PicWidth分别是图像以字节为单位的高度和宽度。 long Presult; int temple33; /定义模板数组 for (int i=0;i3;i+) /模板数组赋值 for (int j =0;j3;j+) templeij =-1; temple11=9; for (i=1;ipicHeight 2;i+) for (int j=1; jpicWidth-2;j+) PResult=0; /对像素进行模板操作 for (int k=0; k3; k+) for(int l=0; l255) PResult=255; if (PResult0) PResult=0;*(picArray +(i 1)*picWidth +j) = (byte) PResult;在建立项目之前,需要在Mydll.def文件的EXPORTS项下加一行Myfunc。因为在VB的命名规则中第1个字符不允许为“-”,而VC编写的过程,其默认的导出函数,会在函数名前加“-”。所以只有强制VC按要求命名导出函数。生成Mydll.dll后,将Mydll.dll复制到VB编写的执行文件所在的目录。在VB中对应声明Myfunc过程。Private Declare Sub Myfunc Lib “mydll” (PicArray as Byte, PicHeight as Long, Pic
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《墙钢筋计算》课件
- TORCH感染与优生课件
- 《雷达概述》课件
- 《投资经济学》课件
- 《修辞与翻译》课件
- 商务沟通练习测试题附答案
- 水环境监测技术复习测试卷附答案(一)
- 《风电场管理探讨》课件
- 《Web项目开发.NE》课件
- 《孝文帝改革》课件
- 2025甘肃省事业单位联考招聘(3141人)高频重点提升(共500题)附带答案详解
- JJF 1176-2024(0~2 300) ℃钨铼热电偶校准规范
- 8.4+同一直线上二力的合成课件+2024-2025学年人教版物理八年级下册
- 地质灾害防治工程施工技术要点课件
- 防涉黄课件教学课件
- 家政公司服务员考试题库单选题100道及答案解析
- 人工智能:AIGC基础与应用 课件 实训项目九 使用度加创作工具和剪映进行智能化短视频创作
- 企业人才招聘与选拔方法论研究
- 《日影的朝向及长短》课件
- 《MATLAB编程及应用》全套教学课件
- GB/T 11263-2024热轧H型钢和剖分T型钢
评论
0/150
提交评论