vb 如何用BitBlt复制后台程序图像?
不知道为啥我用getdc获取别的程序中的图片框的设备句柄之后,我用BitBlt来复制这个图片框,如果这个程序在前台就能够正确的复制图像到我的程序中,可是如果这个程序是在后...
不知道为啥我用getdc获取别的程序中的图片框的设备句柄之后,我用BitBlt来复制这个图片框,如果这个程序在前台就能够正确的复制图像到我的程序中,可是如果这个程序是在后台的话(就是图片框看不见)BitBlt就不能复制了。
到底为什么呢?
怎么才能够复制其他程序中图片框的图片到我的程序呢?
俄,我要复制的是其他程序中的图片,而不是自己程序中的。
呵呵,你可能误解我的意思了。
这位朋友 ,你能否给我一个例子?我用的api浏览器中的例子没有成功。效果和bitblt一样,把程序隐藏了就没法复制图片了 展开
到底为什么呢?
怎么才能够复制其他程序中图片框的图片到我的程序呢?
俄,我要复制的是其他程序中的图片,而不是自己程序中的。
呵呵,你可能误解我的意思了。
这位朋友 ,你能否给我一个例子?我用的api浏览器中的例子没有成功。效果和bitblt一样,把程序隐藏了就没法复制图片了 展开
1个回答
展开全部
vb自带了快速图片复制更能以取代api函数的bitblt
你可以用paintpicture方法实现,效果更优于bitblt函数
方法:
对象.paintpicture 图片源(为stdpicture变量,也可以是对象.picture属性),目标x坐标,目标y坐标,目标长,目标宽,源x坐标,源y坐标,源长,源宽,处理方式
其中处理方式有好像12种,其中vbsrccopy 指强制覆盖
这个vb自带的内部函数可以自适应的拉伸目标图像
具体详细方法,你可以专门查一查vb的paintpicture方法,我现在在网吧,没有vb程序,所以只能帮你到这种程度了,见谅!
BitBlt是将一幅位图从一个设备场景复制到另一个
目标和源必须都是设备场景
你应该用SetDIBitsToDevice 将一幅与设备无关位图的全部或部分数据直接复制到一个设备
VB声明
Declare Function SetDIBitsToDevice Lib "gdi32" Alias "SetDIBitsToDevice" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal dx As Long, ByVal dy As Long, ByVal SrcX As Long, ByVal SrcY As Long, ByVal Scan As Long, ByVal NumScans As Long, Bits As Any, BitsInfo As BITMAPINFO, ByVal wUsage As Long) As Long
说明
将一幅与设备无关位图的全部或部分数据直接复制到一个设备。这个函数在设备中定义了一个目标矩形,以便接收位图数据。它也在DIB中定义了一个源矩形,以便从中提取数据
返回值
Long,执行成功则返回扫描线的数量,零表示失败。会设置GetLastError
参数表
参数 类型及说明
hdc Long,一个设备场景的句柄。该场景用于接收位图数据
x,y Long,用逻辑坐标表示的目标矩形的起点
dx,dy Long,用目标矩形的设备单位表示的宽度及高度
SrcX,SrcY Long,用设备坐标表示的源矩形在DIB中的起点
Scan Long,Bits数组中第一条扫描线的编号。如BitsInfo之BITMAPINFOHEADER部分的biHeight字段是正数,那么这条扫描线就会从位图的底部开始计算;如果是负数,就从顶部开始计算
NumScans Long,欲复制的扫描线数量
Bits Any,指向一个缓冲区的指针。这个缓冲区包含了以DIB格式描述的位图数据;这种格式是由BitsInfo指定的
BitsInfo BITMAPINFO,对Bits DIB的格式和颜色进行描述的一个结构
wUsage Long,下述常数之一
DIB_PAL_COLORS 颜色表是一个整数数组,其中包含了与目前选入hdc设备场景的调色板相关的索引
DIB_RGB_COLORS 颜色表包含了RG颜色
注解
用GetDeviceCaps判断设备是否支持这个函数
你可以用paintpicture方法实现,效果更优于bitblt函数
方法:
对象.paintpicture 图片源(为stdpicture变量,也可以是对象.picture属性),目标x坐标,目标y坐标,目标长,目标宽,源x坐标,源y坐标,源长,源宽,处理方式
其中处理方式有好像12种,其中vbsrccopy 指强制覆盖
这个vb自带的内部函数可以自适应的拉伸目标图像
具体详细方法,你可以专门查一查vb的paintpicture方法,我现在在网吧,没有vb程序,所以只能帮你到这种程度了,见谅!
BitBlt是将一幅位图从一个设备场景复制到另一个
目标和源必须都是设备场景
你应该用SetDIBitsToDevice 将一幅与设备无关位图的全部或部分数据直接复制到一个设备
VB声明
Declare Function SetDIBitsToDevice Lib "gdi32" Alias "SetDIBitsToDevice" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal dx As Long, ByVal dy As Long, ByVal SrcX As Long, ByVal SrcY As Long, ByVal Scan As Long, ByVal NumScans As Long, Bits As Any, BitsInfo As BITMAPINFO, ByVal wUsage As Long) As Long
说明
将一幅与设备无关位图的全部或部分数据直接复制到一个设备。这个函数在设备中定义了一个目标矩形,以便接收位图数据。它也在DIB中定义了一个源矩形,以便从中提取数据
返回值
Long,执行成功则返回扫描线的数量,零表示失败。会设置GetLastError
参数表
参数 类型及说明
hdc Long,一个设备场景的句柄。该场景用于接收位图数据
x,y Long,用逻辑坐标表示的目标矩形的起点
dx,dy Long,用目标矩形的设备单位表示的宽度及高度
SrcX,SrcY Long,用设备坐标表示的源矩形在DIB中的起点
Scan Long,Bits数组中第一条扫描线的编号。如BitsInfo之BITMAPINFOHEADER部分的biHeight字段是正数,那么这条扫描线就会从位图的底部开始计算;如果是负数,就从顶部开始计算
NumScans Long,欲复制的扫描线数量
Bits Any,指向一个缓冲区的指针。这个缓冲区包含了以DIB格式描述的位图数据;这种格式是由BitsInfo指定的
BitsInfo BITMAPINFO,对Bits DIB的格式和颜色进行描述的一个结构
wUsage Long,下述常数之一
DIB_PAL_COLORS 颜色表是一个整数数组,其中包含了与目前选入hdc设备场景的调色板相关的索引
DIB_RGB_COLORS 颜色表包含了RG颜色
注解
用GetDeviceCaps判断设备是否支持这个函数
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询