'平铺图片
Public Sub FillMap(hDCOut As Long, _
x As Long, y As Long, _
Width As Long, Height As Long, _
hSrcDC As Long, _
SrcX As Long, SrcY As Long, _
SrcWidth As Long, SrcHeight As Long, _
Optional dwRop As RasterOpConstants = vbSrcCopy, _
Optional ByVal StepX As Long = &H80000000, _
Optional ByVal StepY As Long = &H80000000)
Dim I As Long, J As Long
Dim StartX As Long, StartY As Long
Dim PutX As Long, PutY As Long
Dim PutWi As Long, PutHe As Long
Dim TempNum As Long
If StepX = &H80000000 Then StepX = x
If StepY = &H80000000 Then StepY = y
'Debug.Print "Step "; StepX; StepY;
Do While StepX > 0
StepX = StepX - SrcWidth
Loop
Do While StepX <= 0
StepX = StepX + SrcWidth
Loop
StepX = StepX - SrcWidth
Do While StepY > 0
StepY = StepY - SrcHeight
Loop
Do While StepY <= 0
StepY = StepY + SrcHeight
Loop
StepY = StepY - SrcHeight
'Debug.Print StepX; StepY
'Debug.Print SrcWidth
StartX = StepX
Do While StartX < x
StartX = StartX + SrcWidth
Loop
StartX = StartX - SrcWidth
StartY = StepY
Do While StartY < y
StartY = StartY + SrcHeight
Loop
StartY = StartY - SrcHeight
For I = StartY To y + Height - 1 Step SrcHeight
For J = StartX To x + Width - 1 Step SrcWidth
PutWi = SrcWidth
PutHe = SrcHeight
PutX = 0
PutY = 0
If I < y Then
PutY = y - I
PutHe = PutHe - PutY
End If
If I + SrcHeight - 1 > y + Height - 1 Then
PutHe = PutHe + ((y + Height - 1) - (I + SrcHeight - 1))
End If
If J < x Then
PutX = x - J
PutWi = PutWi - PutX
End If
If J + SrcWidth - 1 > x + Width - 1 Then
PutWi = PutWi + ((x + Width - 1) - (J + SrcWidth - 1))
End If
Call BitBlt(hDCOut, _
J + PutX, I + PutY, _
PutWi, PutHe, _
hSrcDC, _
SrcX + PutX, SrcY + PutY, _
dwRop)
'Debug.Print J; I; SrcWidth; SrcHeight; PutX; PutY; PutWi; PutHe
Next J
Next I
'Call BitBlt(hDCOut, 0, 0, SrcWidth, SrcHeight, hSrcDC, 0, 0, vbSrcCopy)
End Sub
API函数自己加
Public Sub FillMap(hDCOut As Long, _
x As Long, y As Long, _
Width As Long, Height As Long, _
hSrcDC As Long, _
SrcX As Long, SrcY As Long, _
SrcWidth As Long, SrcHeight As Long, _
Optional dwRop As RasterOpConstants = vbSrcCopy, _
Optional ByVal StepX As Long = &H80000000, _
Optional ByVal StepY As Long = &H80000000)
Dim I As Long, J As Long
Dim StartX As Long, StartY As Long
Dim PutX As Long, PutY As Long
Dim PutWi As Long, PutHe As Long
Dim TempNum As Long
If StepX = &H80000000 Then StepX = x
If StepY = &H80000000 Then StepY = y
'Debug.Print "Step "; StepX; StepY;
Do While StepX > 0
StepX = StepX - SrcWidth
Loop
Do While StepX <= 0
StepX = StepX + SrcWidth
Loop
StepX = StepX - SrcWidth
Do While StepY > 0
StepY = StepY - SrcHeight
Loop
Do While StepY <= 0
StepY = StepY + SrcHeight
Loop
StepY = StepY - SrcHeight
'Debug.Print StepX; StepY
'Debug.Print SrcWidth
StartX = StepX
Do While StartX < x
StartX = StartX + SrcWidth
Loop
StartX = StartX - SrcWidth
StartY = StepY
Do While StartY < y
StartY = StartY + SrcHeight
Loop
StartY = StartY - SrcHeight
For I = StartY To y + Height - 1 Step SrcHeight
For J = StartX To x + Width - 1 Step SrcWidth
PutWi = SrcWidth
PutHe = SrcHeight
PutX = 0
PutY = 0
If I < y Then
PutY = y - I
PutHe = PutHe - PutY
End If
If I + SrcHeight - 1 > y + Height - 1 Then
PutHe = PutHe + ((y + Height - 1) - (I + SrcHeight - 1))
End If
If J < x Then
PutX = x - J
PutWi = PutWi - PutX
End If
If J + SrcWidth - 1 > x + Width - 1 Then
PutWi = PutWi + ((x + Width - 1) - (J + SrcWidth - 1))
End If
Call BitBlt(hDCOut, _
J + PutX, I + PutY, _
PutWi, PutHe, _
hSrcDC, _
SrcX + PutX, SrcY + PutY, _
dwRop)
'Debug.Print J; I; SrcWidth; SrcHeight; PutX; PutY; PutWi; PutHe
Next J
Next I
'Call BitBlt(hDCOut, 0, 0, SrcWidth, SrcHeight, hSrcDC, 0, 0, vbSrcCopy)
End Sub
API函数自己加
BitBlt【操作系统】
Win9X:Yes
WinNT:Yes【声明】
BitBlt Lib "gdi32" Alias "BitBlt" (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【说明】 将一幅位图从一个设备场景复制到另一个。源和目标DC相互间必须兼容 【返回值】 Long,非零表示成功,零表示失败。会设置GetLastError 【其它】 在NT环境下,如在一次世界传输中要求在源设备场景中进行剪切或旋转处理,这个函数的执行会失败
如目标和源DC的映射关系要求矩形中像素的大小必须在传输过程中改变,那么这个函数会根据需要自动伸缩、旋转、折叠、或切断,以便完成最终的传输过程【参数表】
hDestDC -------- Long,目标设备场景 x,y ------------ Long,对目标DC中目标矩形左上角位置进行描述的那个点。用目标DC的逻辑坐标表示 nWidth,nHeight - Long,欲传输图象的宽度和高度 hSrcDC --------- Long,源设备场景。如光栅运算未指定源,则应设为0 xSrc,ySrc ------ Long,对源DC中源矩形左上角位置进行描述的那个点。用源DC的逻辑坐标表示 dwRop ---------- Long,传输过程要执行的光栅运算
——Snow API
--------------------------------------------------------------------
函数功能:该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境。 函数原型:BOOL BitBlt(HDC hdcDest,int nXDest,int nYDest,int nWidth,int nHeight,HDC hdcSrc,int nXSrc,int nYSrc,DWORD dwRop); 参数: hdcDest:指向目标设备环境的句柄。 nXDest:指定目标矩形区域左上角的X轴逻辑坐标。 nYDest:指定目标矩形区域左上角的Y轴逻辑坐标。 nWidth:指定源和目标矩形区域的逻辑宽度。 nHeight:指定源和目标矩形区域的逻辑高度。 hdcSrc:指向源设备环境的句柄。 nXSrc:指定源矩形区域左上角的X轴逻辑坐标。 nYSrc:指定源矩形区域左上角的Y轴逻辑坐标。 dwRop:指定光栅操作代码。这些代码将定义源矩形区域的颜色数据,如何与目标矩形区域的颜色数据组合以完成最后的颜色。 下面列出了一些常见的光栅操作代码: BLACKNESS:表示使用与物理调色板的索引0相关的色彩来填充目标矩形区域,(对缺省的物理调色板而言,该颜色为黑色)。 DSTINVERT:表示使目标矩形区域颜色取反。 MERGECOPY:表示使用布尔型的AND(与)操作符将源矩形区域的颜色与特定模式组合一起。 MERGEPAINT:通过使用布尔型的OR(或)操作符将反向的源矩形区域的颜色与目标矩形区域的颜色合并。 NOTSRCCOPY:将源矩形区域颜色取反,于拷贝到目标矩形区域。 NOTSRCERASE:使用布尔类型的OR(或)操作符组合源和目标矩形区域的颜色值,然后将合成的颜色取反。 PATCOPY:将特定的模式拷贝到目标位图上。 PATPAINT:通过使用布尔OR(或)操作符将源矩形区域取反后的颜色值与特定模式的颜色合并。然后使用OR(或)操作符将该操作的结果与目标矩形区域内的颜色合并。 PATINVERT:通过使用XOR(异或)操作符将源和目标矩形区域内的颜色合并。 SRCAND:通过使用AND(与)操作符来将源和目标矩形区域内的颜色合并。 SRCCOPY:将源矩形区域直接拷贝到目标矩形区域。 SRCERASE:通过使用AND(与)操作符将目标矩形区域颜色取反后与源矩形区域的颜色值合并。 SRCINVERT:通过使用布尔型的XOR(异或)操作符将源和目标矩形区域的颜色合并。 SRCPAINT:通过使用布尔型的OR(或)操作符将源和目标矩形区域的颜色合并。 WHITENESS:使用与物理调色板中索引1有关的颜色填充目标矩形区域。(对于缺省物理调色板来说,这个颜色就是白色)。 返回值:如果函数成功,那么返回值非零;如果函数失败,则返回值为零。 Windows NT:若想获取更多错误信息,请调用GetLastError函数。 备注:如果在源设备环境中可以实行旋转或剪切变换,那么函数BitBlt返回一个错误。如果存在其他变换(并且目标设备环境中匹配变换无效),那么目标设备环境中的矩形区域将在需要时进行拉伸、压缩或旋转。 如果源和目标设备环境的颜色格式不匹配,那么BitBlt函数将源场景的颜色格式转换成能与目标格式匹配的格式。当正在记录一个增强型图元文件时,如果源设备环境标识为一个增强型图元文件设备环境,那么会出现错误。如果源和目标设备环境代表不同的设备,那么BitBlt函数返回错误。 Windows CE:在Windows CE 1.0版中,参数dwRop只可以指定为下列值:SRCCOPY、SRCAND、SRCPAINT、SRCINVERT。在Windows CE 2.0版中,参数dwRop可以是任何光栅操作代码值。 速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:wingdi.h;库文件:gdi32.lib。
——《Win32 API参考大全》
首先测出窗体的长,宽(用pixel表示)
然后用循环即可
如h为窗体的长
w为窗体的宽
h1为 图片长
w1为 图片宽
for i= 0 to h setp h1
for j= 0 to w setp w1
a=bitblt(xxx.hdc,i,j,h1,w1,ppp.hdc,0,0,vbsrccopy)
next j
next i不止可否???
: )
x As Long, y As Long, _输出的坐标
Width As Long, Height As Long, _输出的大小
hSrcDC As Long, _原图片hDC
SrcX As Long, SrcY As Long, _原图片坐标
SrcWidth As Long, SrcHeight As Long, _原图片大小
Optional dwRop As RasterOpConstants = vbSrcCopy, _
Optional ByVal StepX As Long = &H80000000, _
Optional ByVal StepY As Long = &H80000000)