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

第一、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的结构
  在 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 long
 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 as long
 bixpelspermeter as long
 biypelspermeter as long
 biclrused as long
 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表示行程编码压缩;参数bisizeimage表示实际的位图数据所占字节;参数bixpelspermeter表示目标设备的水平分辨率,单位是每米的像素个数;参数biypelspermeter表示目标设备的垂直分辨率,单位是每米的像素个数;参数biclrused表示使用的颜色数(当bibitcount等于1、4、8时才有效),如果该项为0,表示颜色数为2^bibitcount;参数biclrimportant# 重要的颜色数,如果该项为0,表示所有颜色都是重要的。
  (3)位图调色板
  调色板实际上是一个数组,它的元素的个数由bibitcount和biclrused决定,对于位图文件来说,只有bibitcount等于1、4、8时才有调色板,它们对应的调色板的元素个数分别是2、16、256。调色板结构vb中的声明如下:
private type rgbquad
 rgbblue as byte
 rgbgreen as byte
 rgbred as byte
 rgbreserved as byte
end type
  上述结构中,参数rgbblue表示蓝色分量,参数rgbgreen 绿色分量;参数rgbred表示红色分量;参数rgbreserved为保留位,设置为0既可。对于各个颜色的分量来说,它们分布在0-255之间,数值越大,亮度越大,反之则亮度越小。
  需要说明的是,bitmapinfoheader结构和调色板数据合在一起就构成了bitmapinfo结构,这个结构在显示位图文件时能够用到。该结构vb中声明如下:
private type bitmapinfo
 bmiheader as bitmapinfoheader
 bmicolors(0 to 255) as rgbquad
end type

 (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 = 128
End With

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值