vb2003的BITBLT函数如何vb定义函数句柄HDC

本教程适合什么样的人学习

适合已经掌握基本的c语言语法,想进一步提高c语言,不想总是玩控制台和做数学计算题的朋友。

通过本教程能学到什么?

这个是函数名 就像控制台程序中的 main

这个是一个自定义类型, 是句柄型数据类型,相当于装入了内存的资源的ID,比如我们的程序被加载到内存中,就是一个资源,就有一个编号,WinMain函数的第一个参数就是表示我们当前运行这个程序本身的资源id

应用程序当前实例的句柄。 这个值其实就是程序加载到内存空间后的首地址。

应用程序的先前实例的句柄。对于同一个程序打开两次,出现两个窗口第一次打开的窗口就是先前实例的窗口。

//消息循环,一直停在这里,退出消息循环就表示程序结束了。

//消息循环,一直停在这里,退出消息循环就表示程序结束了。

2.在WM_CREATE消息中,设置什么颜色透明

3.调用透明位图绘制函数,在指定的坐标绘制玫瑰花

个性剪贴板(支持多个内容复制)

屏幕截图工具(自定义水印)

上面的项目都会贯穿整个教程,按照合适的顺序来讲解。

对BitBlt()这个函数的最后一个参数的意义一直不是太了解,只会使用SRCCOPY ,最近的一个项目使用到了这个函数,但是要求要背景透明的将源绘制到目标区域上,源是背景色和字,怎么只拷贝字而把背景色透明化呢?? 
我的解决方法是,把源的背景色绘制为白色,字为黑色,然后在BitBlt的时候最后一个参数用SRCAND,果然可以达到我要的效果,这是为什么呢?呵呵 趁此机会好好看看这个参数介绍吧~~ 
 开始之前,首先要明白,绘制其实就是在给每一个像素点涂颜色,每种颜色都是由红蓝黄三要素组合而成,因此通过RGB 颜色值可以指定出一种颜色,一个 RGB 颜色值由三个两位十六进制数字组成,分别代表各自的颜色强度。例如,颜色值 #FF0000(十六进制) 之所以被渲染为红色,是因为红色的值达到了最高值 FF (等于十进制的 255)。同时红色也可以通过RGB(255,0,0)来表示,也可以通过二进制的0X来表示。
 
 
 
目标区域的左顶点在目标画布上的X坐标
目标区域的左顶点在目标画布上的Y坐标
BitBlt操作区域的宽度
源区域左顶点在源画布上的X坐标
源区域左顶点在源画布上的Y坐标

使用物理调色板的0索引颜色填充目标区域

(物理调色板的默认0索引颜色是黑色

将目标区域的各像素点颜色值进行取反操作

将源区域与指定的笔刷进行合并,即进行“AND()”

将源区域取反后与目标区域进行“ (OR)”操作

将源区域色值取反后拷贝到目标区域

将源区域与目标区域按照“(OR)”操作进行混合,然后将结果颜色进行取反操作

将指定的笔刷拷贝到目标位图上

通过“异或(XOR)”操作,将指定的笔刷与目标区域的颜色进行混合

通过“按位与(AND)”操作混合源和目标区域。

直接将源拷贝到目标区域

将目标区域颜色进行取反之后通过“按位与(AND)”操作与源进行混合

通过“异或(XOR)”操作混合源和目标区域

通过“按位(OR)”操作混合源和目标区域

使用物理调色板的1索引颜色填充目标区域

(物理调色板的默认1索引颜色是白色

 
 

通过上述介绍,想必大家知道为什么了吧,我的背景是白色,字是黑色,在进行SRCAND操作的时候,白色是#ffffff 所以进行bitblt之后的颜色以目标区域的颜色为本,而因为字是黑色#000000,在进行与操作之后目标区的相应部分也成了黑色~~!因此看前来像是,将源以背景透明的方式拷贝到了目标上~~!

该函数显示拥有透明或半透明像素的位图。 

blendFunction: [in] 指定用于源位图和目标位图使用的alpha混合功能,用于整个源位图的全局alpha值和格式信息。源和目标混合功能当前只限为AC_SRC_OVER

如果成功,返回TRUE;失败返回FALSE

该结构控制指定用于源位图和目标位图使用混合功能 

BlendOp: 指定源混合操作。目前,唯一的源和目标混合操作被定义为 AC_SRC_OVER。 详情,请参阅下面的备注部分。

例如如果alpha通道值为x,那么在调用之前必,红色,绿色和蓝色通道须乘以x然后除以0xff。 

   如果源位图不使用SourceConstantAlpha(即,它等于0xFF),每个像素的alpha值决定源和目标位图的混合,如下列公式所示。

函数从源矩形中复制一个位图到目标矩形,必要时按目前目标设备设置的模式进行图像的拉伸或压缩以满足目标矩形的尺寸。

hdcDest:指向目标设备环境的句柄。

nWidthDest、nHeightDest:指定目标矩形的宽度和高度,按逻辑单位表示。

hdcSrc:指向源设备环境的句柄。

nXOriginSrc、nYOriginSrc:指向源矩形区域左上角的X轴和Y轴坐标,按逻辑单位表示。

nWidthSrc、nHeightSrc:指定源矩形的宽度和高度,按逻辑单位表示。

dwRop:指定要进行的光栅操作。光栅操作码定义了系统如何在输出操作中组合颜色,这些操作包括画刷、源位图和目标位图等对象。参考  可了解常用的光栅操作码列表。

如果函数执行成功,那么返回值为非零,如果函数执行失败,那么返回值为零。若想获得更多的错误信息,请调用GetLastError函数。

   StretchBlt函数在内存中对源位图进行扩展或压缩,然后将结果拷贝到目标矩形中。如果模板要与结果组合,则在扩展后的位图拷贝到目标矩形后才组合。

   当正在记录一个增强型图元文件时,如果源设备环境标识为一个增强型图元文件设备环境,那么会出现错误(函数返回FALSE)。

   如果指定的光栅操作需要画刷,那么系统使用当前已被选入到目标DC的画刷。

   目标坐标使用当前为目标DC指定的转换方式进行转换。源坐标则使用当前为源DC指定的转换方式进行转换。

   如果源转换发生了旋转或剪接,将产生错误。

   如果目标位图、源位图和模板位图的颜色格式不一致,StretchBlt会转换源位图和模板位图以匹配目标位图。

   如果要将黑白位图转换为彩色位图,它将背景色设置为白位(1),前景色设置为黑位(0)。如果要将彩色位图转换为黑白位图,函数设置与背景色匹配的像素为白(1),其它像素为黑(0),用到了带颜色的设备上下文中的前景色和背景色。

   如果hdc指定镜像DC,水平坐标将从右到左增加,而不是从左到右。

该函数可以设置指定设备环境中的位图拉伸模式。

hdc:设备环境句柄。

iStretchMode:指定拉伸模式。它可以取下列值,这些值的含义如下:

对消除的和存在的像素的颜色值进行布尔AND(与)操作运算。如果该位图是单色位图,那么该模式以牺牲白色像素为代价,保留黑色像素点。

删除像素。该模式删除所有消除的像素行,不保留其信息。

在X和Y轴方向线性修改颜色值。该模式仅当缩放源图像时工作,剪切时无效。该模式只在SRCCOPYSRCAND,

   如果函数执行成功,那么返回值就是先前的拉伸模式,如果函数执行失败,那么返回值为0。若想获得更多错误信息,请调用GetLastError函数,该值可能为下面的值

一个或多个输入参数非法

   拉伸模式在应用程序调用StretchBit函数时定义系统如何将位图的行或列与显示设备上的现有像素点进行组合。

   HALFTONE模式比其他三种模式需要对源图像进行更多的处理,也比其他模式慢,但它能产生高质量图像,也应注意在设置HALFTONE模式之后,应调用SetBrushOrgEx函数以避免出现刷子没对准现象。

   根据设备驱动程序的功能不同,其他一些拉伸模式也可能有效。

该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境。

hdcDest:指向目标设备环境的句柄。

nXDest、nYDest:指定目标矩形区域左上角的X轴和Y轴逻辑坐标

nWidth、nHeight:指定源和目标矩形区域的逻辑宽度和逻辑高度。

hdcSrc:指向源设备环境的句柄。

nXSrc、nYSrc:指定源矩形区域左上角的X轴和Y轴逻辑坐标。

dwRop:指定光栅操作代码。这些代码将定义源矩形区域的颜色数据,如何与目标矩形区域的颜色数据组合以完成最后的颜色。下面列出了一些常见的光栅操作代码:

表示使用与物理调色板的索引0相关的色彩来填充目标矩形区域,(对缺省的物理调色板而言,该颜色为黑色)。

表示使目标矩形区域颜色取反。

表示使用布尔型AND(与)操作符将源矩形区域的颜色与特定模式组合一起。

通过使用布尔型OR(或)操作符将源矩形区域的颜色取反后与目标矩形区域的颜色合并。

将源矩形区域颜色取反,拷贝到目标矩形区域。

使用布尔类型的OR(或)操作符组合源和目标矩形区域的颜色值,然后将合成的颜色取反。

将特定的模式拷贝到目标位图上。

通过使用布尔型XOR(异或)操作符将源和目标矩形区域内的颜色合并。

通过使用布尔型OR(或)操作符将源矩形区域取反后的颜色值与特定模式的颜色合并。然后使用OR(或)操作符将该操作的结果与目标矩形区域内的颜色合并。

通过使用布尔型AND(与)操作符来将源和目标矩形区域内的颜色合并。

将源矩形区域直接拷贝到目标矩形区域。

通过使用布尔型AND(与)操作符将目标矩形区域颜色取反后与源矩形区域的颜色值合并。

通过使用布尔型XOR(异或)操作符将源和目标矩形区域的颜色合并。

通过使用布尔型OR(或)操作符将源和目标矩形区域的颜色合并。

使用与物理调色板中索引1有关的颜色填充目标矩形区域。(对于缺省物理调色板来说,这个颜色就是白色)。

   如果函数成功,那么返回值非零;如果函数失败,则返回值为零。调用GetLastError函数获取扩展错误信息。

   如果在源设备环境中可以实行旋转或剪切变换,那么函数BitBlt返回一个错误。

   如果存在其他变换(并且目标设备环境中匹配变换无效),那么目标设备环境中的矩形区域将在需要时进行拉伸、压缩或旋转。

   如果源和目标设备环境的颜色格式不匹配,那么BitBlt函数将源场景的颜色格式转换成能与目标格式匹配的格式。

   当正在记录一个增强型图元文件时,如果源设备环境标识为一个增强型图元文件设备环境,那么会出现错误。

   如果源和目标设备环境代表不同的设备,那么BitBlt函数返回错误。

下面是MSDN上的例子:

我要回帖

更多关于 vb定义函数 的文章

 

随机推荐