快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门新葡新京返水:基于VB6.0的数字图像编程实例



媒介

跟着编程技巧的成长,若何在法度榜样中处置惩罚图像已经是所有编程喜欢者不得不面对的一个紧张问题,笔者在天极网上曾颁发了多篇关于数字图像处置惩罚的文章,但都是基于Visual C++开拓平台的,对付习气于应用Visual Basic的读者同伙来说,不能不算是一个遗憾。 网上有很多同伙关心若何在Viusal Basic情况下进行一些基础的图像处置惩罚,如位图文件数据的读取、显示、实现殊效等,为了满意上述这些同伙们的需求,笔者经由过程这篇文章先容一下若何在Visual Basic情况下实现图像文件的一些基础操作,盼望可以对广大年夜喜好Visual Basic编程的同伙起到入门的感化。

一、BMP位图的DIB的布局

在 Windows 3.0 曩昔,Windows系统用的是DDB(设备有关位图),DDB没有调色板,显示的颜色依附硬件,处置惩罚色彩很未方便。以是微软从Windows 3.0今后从新定义了BMP文件款式,使其支持设备无关位图--也便是DIB,其布局主要由以下几个部分构成:1)BITMAPFILEHEADER:BMP文件头;2)DIB BITMAPINFOHEADER:BMP位图文件信息头;3)RGBQUAD[]:BMP位图的调色板;4)位图数据块。BMP文件的布局示意图如图一所示:

图一、位图文件的布局示意图

(1)BMP位图文件头BITMAPFILEHEADER的VB声明如下:

Type BITMAPFILEHEADER

bfType(0 to 1) As Byte

bfSize As L澳门新葡新京返水ong

bfReserved1 As Integer

bfReserved2 As Integer

bfOffBits As Long

End Type

上述布局中,参数bfType 唆使文件的类型,对付位图文件来说,它必须是"BM";参数bfSize唆使位图文件的大年夜小,它包括BITMAPFILEHEADER的长度;参数bfReserved1、bfReserved2今朝保留,必须即是0;参数bfOffBits表示位图数据间隔文件头的偏移字节数。

(2)文件信息头BITMAPINFOHEADER布局在VB中声明如下:

Type BITMAPINFOHEADER

biSize As Long

biWidth As Long

biHeight As Long

biPlanes As Integer

biBitCount As Integer

biCompression As Long

biSizeImage A澳门新葡新京返水s Long

biXPelsPerMeter As Long

biYPelsPerMeter As Long

biClrUsed As Lo澳门新葡新京返水ng

biClrImportant As Long

End Type

上述布局中,参数biSize表示BITMAPINFOHEADER布局的大年夜小;参数biWidth表示位图的高度,单位是像素;参数biHeight 位图的宽度,单位是像素;参数biPlanes 设备的位平面数,现在都是1;参数biBitCount 图像的颜色位数,1表示单色位图、4表示16色位图、8表示256色位图、24表示真彩色位图、32表示32位位图,默认环境下Windows不会处置惩罚最高8位,可以将它作为自己的Alpha通道;参数biCompression表示图像的压缩要领,BI_RGB表示无压缩、BI_RLE8表示行程编码压缩;参数biSizeImag澳门新葡新京返水e表示实际的位图数据所占字节;参数biXPelsPerMeter表示目标设备的水中分辨率,单位是每米的像素个数;参数biYPelsPerMeter表示目标设备的垂直分辨率,单位是每米的像素个数;参数biClrUsed表示应用的颜色数(当biBitCount即是1、4、8时才有效),假如该项为0,表示颜色数为2^biBitCount;参数biClrImportant# 紧张的颜色数,假如该项为0,表示所有颜色都是紧张的。

(3)位图调色板

调色板实际上是一个数组,它的元素的个数由biBitCount和biClrUsed抉择,对付位图文件来说,只有biBitCount即是1、4、8时才有调色板,它们对应的调色板的元素个数分手是2、16、256。调色板布局在VB中的声明如下:

Declare Function StretchDIBits Lib "gdi32" (ByVal hDC As Long, ByVal XDest As Long, ByVal YDest As Long, ByVal nDestWidth As Long, ByVal nDestHeight As Long, ByVal XSrc As Long, ByVal YSrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, lpBits As Any, lpBitsInfo As Any, ByVal wUsage As Long, ByVal dwRop As Long) As Long

该函数履行成功返回位图句柄,零表示掉败。此中参数hDC 一个设备场景的句柄,该设备场景定义了要创建的与设备有关位图的设置设置设备摆设摆设信息;参数Xdest为指定绘制区域的左上角X坐标;参数Ydest为指定绘制区域的左上角Y坐标;参数nDestWidth为指定绘制区域的高度;参数nDestHeight为指定绘制区域的宽度;参数XSrc为矩形在DIB中的动身点X坐标;参数YSrc 为矩形在DIB中的动身点Y坐标;参数nSrcWidth指定原位图绘制区域的左上角X坐标;参数nSrcHeight指定原位图绘制区域的左上角Y坐标;参数lpBits 指向一个缓冲区的指针,这个缓冲区包孕了以DIB款式描述的位图数据;lpBitsInfo 指向BITMAPINFO布局,参数iUsage一样平常环境下即是DIB_RGB_COLORS,表示包孕了RGB颜色;参数dwRop表示欲进行的光栅运算,详细内容可以拜见MSDN。

当然,显示位图文件的函数不光这一个,还有其他的一些函数,详细内容读者同伙可以参考相关资料。

三、实现位图的淡入淡出的实例

为了演示若何在Visual Basic中实现数字图像的基础操作,本文的例子实现了一幅256色彩色位图淡入淡出的显示效果,用户可以经由过程设准光阴澳门新葡新京返水的是非节制图像淡入淡出的速率。例子法度榜样中,有两个模块,此中MyMemory模块是用来申请特定的内存空间,为后续读取位图文件作筹备,另一模块Bitmap是用来实现位图文件数据的读写、筹备淡入淡出操作时的调色板等。对付例子中的256色彩色位图来说,实现淡入淡出显示主如果经由过程操作图像的调色板来实现的。详细思路是设置一个数组来寄放多少个调色板,此中一个调色板保存位图文件中的原始调色板数据,别的的调色板中的数据按照比例等距离的缩小,直至调色板中的R、G、B分量整个为零为止。有了这些预设的调色板,就可以在准时显示的历程中实现图像的淡入淡出的效果了。

四、小结

本文先容了Visual Basic中处置惩罚位图文件的基础常识,供给了示例中实现了位图文件的读写、显示等基础操作,读者同伙可以在该代码的根基长进行改动、富厚,实现更多更繁杂的图像处置惩罚功能,有兴趣的同伙可以着手亲身实验一下。

您可能还会对下面的文章感兴趣: