基于VB6.0的数字图像编程实例(3)
二、位图文件的显示
对位图文件的结构了解以后,我们就能顺利读取位图文件中的各种信息,然后结合特定的显示函数就可以将位图文件显示出来,本文中这个特定的显示函数是StretchDIBits(),它在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中处理位图文件的基本知识,提供了示例中实现了位图文件的读写、显示等基本操作,读者朋友可以在该代码的基础上进行修改、丰富,实现更多更复杂的图像处理功能,有兴趣的朋友可以动手亲自实验一下。
下载本文源代码
二、位图文件的显示
对位图文件的结构了解以后,我们就能顺利读取位图文件中的各种信息,然后结合特定的显示函数就可以将位图文件显示出来,本文中这个特定的显示函数是StretchDIBits(),它在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中处理位图文件的基本知识,提供了示例中实现了位图文件的读写、显示等基本操作,读者朋友可以在该代码的基础上进行修改、丰富,实现更多更复杂的图像处理功能,有兴趣的朋友可以动手亲自实验一下。
下载本文源代码
回复Comments
{commenttime}{commentauthor}
{CommentUrl}
{commentcontent}