BitBlt 是VB较常用的绘图API函数,绘图速度基本上是API中最快的了。它虽然使用简单,但功能强大,以下我就来给新手们简单的讲解一下它
的用法
BitBlt 的声明如下(在窗体代码中须在前面加上Private关键字):
Declare Func**** BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
请把Func****替换为 func(baidu)tion
它的参数表如下:
参数 类型 说明
hDestDC Long, 目标设备场景
x,y Long, 对目标DC中目标矩形左上角位置进行描述的那个点。用目标DC的逻辑坐标表示
nWidth,nHeight Long, 欲传输图象的宽度和高度
hSrcDC Long, 源设备场景。如光栅运算未指定源,则应设为0
xSrc,ySrc Long, 对源DC中源矩形左上角位置进行描述的那个点。用源DC的逻辑坐标表示
dwRop Long, 传输过程要执行的光栅运算
用法事例:
l = BitBlt(Picture2.hDC, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, Picture1.hDC, 0, 0, SRCCOPY)
解释:将Picture1中的位置为(0,0),大小为 Picture1.ScaleWidth×Picture1.ScaleHeight 的图像复制到Picture2的(0,0)位置
其中SRCCOPY为绘图模式
BitBlt之所以强大,是因为dwRop参数有不同的值,当dwRop取不同的值时会产生不同的效果。
下面为了让新手便于理解,将源设备定为Picture1,将目标设备称为Picture2。
下面的这些就是dwRop可取的值即其意义:
SRCCOPY:将Picture1中颜色复制到Picture2。
NOTSRCCOPY:将Picture1中颜色取反色,再复制到Picture2。
SRCAND:将Picture1中颜色与Picture2中颜色合并后,再复制到Picture2中。
MERGEPAINT:同时将Picture1与Picture2中的颜色去反色并合并,再复制到Picture2中。
BLACKNESS:将物理调色板的索引0相关的色彩填充到Picture2中,(默认为黑色)。
WHITENESS:将物理调色板的索引1相关的色彩填充到Picture2中,(默认为白色)。
(*)SRCERASE:将Picture1中的颜色去反色,再与Picture2中颜色异或(Xor)合并,,再复制到Picture2中。
(*)NOTSRCERASE: 将Picture2中的颜色去反色,再与Picture1中颜色异或(Xor)合并,,再复制到Picture2中。
(*)SRCINVERT: 将Picture1中颜色与Picture2中颜色异或(Xor)合并后,再复制到Picture2中。
(*)DSTINVERT:将Picture2中颜色取反色后,再复制到Picture2中。
的用法
BitBlt 的声明如下(在窗体代码中须在前面加上Private关键字):
Declare Func**** BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
请把Func****替换为 func(baidu)tion
它的参数表如下:
参数 类型 说明
hDestDC Long, 目标设备场景
x,y Long, 对目标DC中目标矩形左上角位置进行描述的那个点。用目标DC的逻辑坐标表示
nWidth,nHeight Long, 欲传输图象的宽度和高度
hSrcDC Long, 源设备场景。如光栅运算未指定源,则应设为0
xSrc,ySrc Long, 对源DC中源矩形左上角位置进行描述的那个点。用源DC的逻辑坐标表示
dwRop Long, 传输过程要执行的光栅运算
用法事例:
l = BitBlt(Picture2.hDC, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, Picture1.hDC, 0, 0, SRCCOPY)
解释:将Picture1中的位置为(0,0),大小为 Picture1.ScaleWidth×Picture1.ScaleHeight 的图像复制到Picture2的(0,0)位置
其中SRCCOPY为绘图模式
BitBlt之所以强大,是因为dwRop参数有不同的值,当dwRop取不同的值时会产生不同的效果。
下面为了让新手便于理解,将源设备定为Picture1,将目标设备称为Picture2。
下面的这些就是dwRop可取的值即其意义:
SRCCOPY:将Picture1中颜色复制到Picture2。
NOTSRCCOPY:将Picture1中颜色取反色,再复制到Picture2。
SRCAND:将Picture1中颜色与Picture2中颜色合并后,再复制到Picture2中。
MERGEPAINT:同时将Picture1与Picture2中的颜色去反色并合并,再复制到Picture2中。
BLACKNESS:将物理调色板的索引0相关的色彩填充到Picture2中,(默认为黑色)。
WHITENESS:将物理调色板的索引1相关的色彩填充到Picture2中,(默认为白色)。
(*)SRCERASE:将Picture1中的颜色去反色,再与Picture2中颜色异或(Xor)合并,,再复制到Picture2中。
(*)NOTSRCERASE: 将Picture2中的颜色去反色,再与Picture1中颜色异或(Xor)合并,,再复制到Picture2中。
(*)SRCINVERT: 将Picture1中颜色与Picture2中颜色异或(Xor)合并后,再复制到Picture2中。
(*)DSTINVERT:将Picture2中颜色取反色后,再复制到Picture2中。
MERGECOPY:AND操作符将源矩形区域的颜色与特定模式组合一起。
PATCOPY:将特定的模式拷贝到目标位图上。
PATPAINT:通过使用布尔OR(或)操作符将源矩形区域取反后的颜色值与特定模式的颜色合并。然后使用OR(或)操作符将该操作的结果与目标矩形区域内的颜色合并。
PATINVERT:通过使用XOR(异或)操作符将源和目标矩形区域内的颜色合并。
MERGEPAINT:通过使用布尔型的OR(或)操作符将反向的源矩形区域的颜色与目标矩形区域的颜色合并。
注:以上属性需定义
上面带“(*)”号的多次点击会闪烁(因为异或的原因),其中SRCINVERT的解释可能不对,望高手指正
dwRop其实还有MERGECOPY,SRCPAINT,PATCOPY,PATPAINT,PATINVERT五个属性,但我还不明白这些属性的意义,就不在这里献丑了,等待高
手来解释。另外,希望高手能解释一下“物理调色板”。
我写这个是为了帮助新手(其实我也是新手-_-!)处理简单的绘图任务,同时鼓励新手大胆运用API函数。新手在刚学VB时会对API函数敬而远之,会感到其很神秘。其实API跟VB内置的函数是一样的,而且要比VB内置的函数强大许多,只不过需要额外定义。当你习惯用API之后,便会
有相“用”恨晚的感觉。
废话不多说了,赶紧试试吧!
这是程序开始画面:
PATCOPY:将特定的模式拷贝到目标位图上。
PATPAINT:通过使用布尔OR(或)操作符将源矩形区域取反后的颜色值与特定模式的颜色合并。然后使用OR(或)操作符将该操作的结果与目标矩形区域内的颜色合并。
PATINVERT:通过使用XOR(异或)操作符将源和目标矩形区域内的颜色合并。
MERGEPAINT:通过使用布尔型的OR(或)操作符将反向的源矩形区域的颜色与目标矩形区域的颜色合并。
注:以上属性需定义
上面带“(*)”号的多次点击会闪烁(因为异或的原因),其中SRCINVERT的解释可能不对,望高手指正
dwRop其实还有MERGECOPY,SRCPAINT,PATCOPY,PATPAINT,PATINVERT五个属性,但我还不明白这些属性的意义,就不在这里献丑了,等待高
手来解释。另外,希望高手能解释一下“物理调色板”。
我写这个是为了帮助新手(其实我也是新手-_-!)处理简单的绘图任务,同时鼓励新手大胆运用API函数。新手在刚学VB时会对API函数敬而远之,会感到其很神秘。其实API跟VB内置的函数是一样的,而且要比VB内置的函数强大许多,只不过需要额外定义。当你习惯用API之后,便会
有相“用”恨晚的感觉。
废话不多说了,赶紧试试吧!
这是程序开始画面:
程序下载地址:
http://cid-03cbc1ef50ff74ad.skydrive.live.com/browse.aspx/.Public?lc=2052
在里面的 API函数研究文件夹 中
点击“动画”按钮出现自动演示图片闪烁
这是点击“手动”按钮第一次:
http://cid-03cbc1ef50ff74ad.skydrive.live.com/browse.aspx/.Public?lc=2052
在里面的 API函数研究文件夹 中
点击“动画”按钮出现自动演示图片闪烁
这是点击“手动”按钮第一次: