加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

vb下的with语句定义BITMAPINFO类型的变量

发布时间:2020-12-16 23:26:10 所属栏目:大数据 来源:网络整理
导读:第一、With 语句介绍 在一个单一对象或一个用户定义类型上执行一系列的语句。 语法 With object [statements] End With With 语句的语法具有以下几个部分: 部分 描述 object 必要参数。一个对象或用户自定义类型的名称。 statements 可选参数。要执行在 obj

第一、With 语句介绍

在一个单一对象或一个用户定义类型上执行一系列的语句。

语法

With object
[statements]

End With

With 语句的语法具有以下几个部分:

部分 描述
object 必要参数。一个对象或用户自定义类型的名称。
statements 可选参数。要执行在 object 上的一条或多条语句。


说明

With 语句可以对某个对象执行一系列的语句,而不用重复指出对象的名称。例如,要改变一个对象的多个属性,可以在 With 控制结构中加上属性的赋值语句,这时候只是引用对象一次而不是在每个属性赋值时都要引用它。下面的例子显示了如何使用 With 语句来给同一个对象的几个属性赋值。

注意 当程序一旦进入 With 块,object 就不能改变。因此不能用一个 With 语句来设置多个不同的对象。

可以将一个 With 块放在另一个之中,而产生嵌套的 With 语句。但是,由于外层 With 块成员会在内层的 With 块中被屏蔽住,所以必须在内层的 With 块中,使用完整的对象引用来指出在外层的 With 块中的对象成员。

重点 一般来说,建议不要跳入或跳出 With 块。如果在 With 块中的语句被执行,但是 With 或 End With 语句并没有执行,则一个包含对该对象引用的临时变量将保留在内存中,直到您退出该过程。

第二、bmp位图的dib的结构
  在windows3.0以前,windows系统用的是ddb(设备有关位图),ddb没有调色板,显示的颜色依赖硬件,处理色彩很不方便。所以微软从windows3.0以后重新定义了bmp文件格式,使其支持设备无关位图--也就是dib,其结构主要由以下几个部分构成:1)bitmapfileheader:bmp文件头;2)dibbitmapinfoheader:bmp位图文件信息头;3)rgbquad[]:bmp位图的调色板;4)位图数据块。bmp文件的结构示意图如图一所示:

图一、位图文件的结构示意图
  (1)bmp位图文件头bitmapfileheader的vb声明如下:
typebitmapfileheader
 bftype(0to1)asbyte
 bfsizeaslong
 bfreserved1asinteger
 bfreserved2asinteger
 bfoffbitsaslong
endtype
  上述结构中,参数bftype指示文件的类型,对于位图文件来说,它必须是bm;参数bfsize指示位图文件的大小,它包括bitmapfileheader的长度;参数bfreserved1、bfreserved2目前保留,必须等于0;参数bfoffbits表示位图数据距离文件头的偏移字节数。
  (2)文件信息头bitmapinfoheader结构vb中声明如下:
typebitmapinfoheader
 bisizeaslong
 biwidthaslong
 biheightaslong
 biplanesasinteger
 bibitcountasinteger
 bicompressionaslong
 bisizeimageaslong
 bixpelspermeteraslong
 biypelspermeteraslong
 biclrusedaslong
 biclrimportantaslong
endtype
  上述结构中,参数bisize表示bitmapinfoheader结构的大小;参数biwidth表示位图的高度,单位是像素;参数biheight位图的宽度,单位是像素;参数biplanes设备的位平面数,现在都是1;参数bibitcount图像的颜色位数,1表示单色位图、4表示16色位图、8表示256色位图、24表示真彩色位图、32表示32位位图,默认情况下windows不会处理最高8位,可以将它作为自己的alpha通道;参数bicompression表示图像的压缩方式,bi_rgb表示无压缩、bi_rle8表示行程编码压缩;参数bisizeimage表示实际的位图数据所占字节;参数bixpelspermeter表示目标设备的水平分辨率,单位是每米的像素个数;参数biypelspermeter表示目标设备的垂直分辨率,单位是每米的像素个数;参数biclrused表示使用的颜色数(当bibitcount等于1、4、8时才有效),如果该项为0,表示颜色数为2^bibitcount;参数biclrimportant#重要的颜色数,如果该项为0,表示所有颜色都是重要的。
  (3)位图调色板
  调色板实际上是一个数组,它的元素的个数由bibitcount和biclrused决定,对于位图文件来说,只有bibitcount等于1、4、8时才有调色板,它们对应的调色板的元素个数分别是2、16、256。调色板结构vb中的声明如下:
privatetypergbquad
 rgbblueasbyte
 rgbgreenasbyte
 rgbredasbyte
 rgbreservedasbyte
endtype
  上述结构中,参数rgbblue表示蓝色分量,参数rgbgreen绿色分量;参数rgbred表示红色分量;参数rgbreserved为保留位,设置为0既可。对于各个颜色的分量来说,它们分布在0-255之间,数值越大,亮度越大,反之则亮度越小。
  需要说明的是,bitmapinfoheader结构和调色板数据合在一起就构成了bitmapinfo结构,这个结构在显示位图文件时能够用到。该结构vb中声明如下:
privatetypebitmapinfo
 bmiheaderasbitmapinfoheader
 bmicolors(0to255)asrgbquad
endtype

 (4)位图数据
  对于位图文件来说,一行的图像数据叫做一个扫描行,一个扫描行的长度必须是4的倍数(字节),如果不是,则需要补齐。计算公式:linebytes=((biwidth*bibitcount+31)and&hffffffe0)/8,通常情况下dib的扫描行是逆序存储的(相对于屏幕坐标系而言),即屏幕上的第一行是dib位图数据的最后一行。对于256色位图来说,它用8bit表示一个像素的颜色索引,也就是说,位图显示时,根据当前索引值来到位图的调色板中确定该像素的颜色;对于真彩色图象来说,位图文件中没有调色板信息,它直接用24个bit位表示一个像素的颜色,每个字节表示一种基色,也就是r、g、b分量中的一个值,需要注意的是,真彩色位图文件中三个字节的排列顺序是bgr,而不是传统的rgb。

第三、with语句定义BITMAPINFO变量


Dim bmp_info As BITMAPINFO
With bmp_info.bmiHeader
.biSize = LenB(bmp_info.bmiHeader)
.biWidth = nWidth'参数biwidth表示位图的高度,单位是像素
.biHeight = nHeight'biheight位图的宽度,单位是像素
.biPlanes = 1
.biBitCount = 24
.biCompression = BI_RGB
.biSizeImage = nBufSize
End With

With bmp_info.bmiColors .rgbBlue = 128 .rgbGreen = 128 .rgbRed = 128End With

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读