用vb写高效的图像处理程序

用vb写高效的图像处理程序

ID:6045816

大小:281.50 KB

页数:16页

时间:2018-01-01

用vb写高效的图像处理程序_第1页
用vb写高效的图像处理程序_第2页
用vb写高效的图像处理程序_第3页
用vb写高效的图像处理程序_第4页
用vb写高效的图像处理程序_第5页
资源描述:

《用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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。