欢迎来到天天文库
浏览记录
ID:6045816
大小:281.50 KB
页数:16页
时间:2018-01-01
《用vb写高效的图像处理程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、用VB写高效的图像处理程序自盘古开天地以来(好像夸张了点),一直有人抱怨VB程序速度慢。特别是图像处理,被认为是VB的禁区。说起来也是,市面上的关于VB的图像处理的数据都是先讲计算公式,再直接用PSet(或API函数SetPixel)逐点画(至少我见过的书都是这样)。效果是办到了,但速度慢得离谱:对一幅640*480的图像进行半透明合并就需要10秒钟;而在PhotoShop中,只要一设置图层的透明度,半透明效果立即呈现。难怪有人说VB的闲话。 但这并不表示VB不能写高速的图像处理程序,速度慢是因为没有使用正确的方法。 从VB5开始,能以本机代码
2、编译成exe文件,所以不存在代码执行速度的问题。那么,是什么拖慢了速度呢?就是PSet和SetPixel!PSet把浮点形式的坐标转为像素单位,再交给SetPixel处理。而SetPixel呢,坐标系转化、剪裁区域判断、将颜色匹配为设备支持的最接近的,最后还要根据不同的颜色格式寻址、为将颜色写入其所在位进行位运算。经过这么多层处理,速度不慢才怪。 那么,怎样才能提高处理速度呢?使用DIB,直接对位图所在内存进行操作,速度可以大大提高。现在看看,这只是一个简单的色彩演示程序。CPU:赛扬333;内存:PC100(很老的概念了)的SDRAM,128M
3、B;单位:毫秒Windows98WindowsXP说 明VB_PSet1,199.4553786.1885在VB使用PSet画的VB_SetPixel872.3621451.3712在VB使用SetPixelV画的VB_DIB8.22188.2226在VB使用DIB画的VB_DIB_Ptr9.67839.4420在VB使用DIBSection+模拟指针画的VC(Debug)6.68966.6503VC写的(Debug版)VC(Release)3.27363.6247VC写的(Release版) 从这个表中可看出: 1.VC比VB_DIB、VB
4、_DIB_Ptr快两倍,这是因为SafeArray结构的数组比真正的指针慢,但也不是某些人所说的70~100倍; 2.VB_DIB_Ptr比VB_DIB慢一点,这是因为模拟指针本来就是靠SafeArray结构的数组,而且模拟指针需要对两个数组进行操作,所以速度慢一点; 3.真正差了70~100倍是VB_PSet和VB_SetPixel,特别是VB_PSet在Windows98下与VB_DIB差了145倍。 以上可证,速度慢的原因是SetPixel非常低效,而并不是VB的问题。虽然VC的的确比较快,但是我写这篇文章不是为了讨论速度极限(否则这篇
5、文章会改名为《如何用汇编写高速的图像处理程序》),而是为了告诉大家如何在VB中写能够实时处理的图像处理程序。 在Windows3.0以前,Windows系统用的是DDB(设备有关位图)。DDB没有调色板,显示的颜色依赖硬件,处理色彩很不方便。所以Microsoft在Windows3.0中重新定义了BMP文件格式(BMP3.0),使其支持设备无关位图——也就是DIB。 时至今日,BMP的版本号已升至5.0(WindowsNT4.0、Windows95定义了BMP4.0,Windows98、Windows2000定义了BMP5.0),但基本结构没有
6、变——仍是BMP文件头和DIB组成:BMP文件BITMAPFILEHEADERBMP文件头DIBBITMAPINFOHEADER位图信息头BITMAPINFORGBQUAD[]调色板位图数据(#代表可以不填(=0)的项目) BMP文件头——BITMAPFILEHEADER原型定义:typedefstructtagBITMAPFILEHEADER{//bmfhWORDbfType;DWORDbfSize;WORDbfReserved1;WORDbfReserved2;DWORDbfOffBits;}BITMAPFILEHEADER;VB声明:Type
7、BITMAPFILEHEADERbfType(0to1)AsBytebfSizeAsLongbfReserved1AsIntegerbfReserved2AsIntegerbfOffBitsAsLongEndType说明:bfType指示文件的类型,必须是“BM”bfSize#指示文件的大小,包括BITMAPFILEHEADERbfReserved1保留,=0bfReserved2保留,=0bfOffBits#从文件头到位图数据的偏移字节数文件信息头——BITMAPINFOHEADER原型定义:typedefstructtagBITMAPINFOH
8、EADER{//bmihDWORDbiSize;LONGbiWidth;LONGbiHeight;WORDbiPlanes
此文档下载收益归作者所有