一共100个图片,是一个大图片分割成10*10块,每块大小一样,现在想把这些图片再组成原来的大图片并保存下来。
用picuturebox 的savepicture方法要求 picturebox的autoredraw为true,否则说can't create autoredraw image ,但是auturedraw=true时如何把图片顺序放到picturebox里呢?paintpicture或者bitblt都不行 也报can't create autoredraw image,请问如何解决?现在看来要想存图片就不能拼接,要想拼接就不能存图片,用form自己的picture倒是可以,但是最大1024*768,图片远大于这个尺寸。
用picuturebox 的savepicture方法要求 picturebox的autoredraw为true,否则说can't create autoredraw image ,但是auturedraw=true时如何把图片顺序放到picturebox里呢?paintpicture或者bitblt都不行 也报can't create autoredraw image,请问如何解决?现在看来要想存图片就不能拼接,要想拼接就不能存图片,用form自己的picture倒是可以,但是最大1024*768,图片远大于这个尺寸。
Dim hMemDC As Long
Dim bm As BITMAP
for 100次
Set hPicture = LoadPicture(App.Path + "\" & i & ".bmp") hMemDC = CreateCompatibleDC(GetDC(hPicture.Handle)) SelectObject hMemDC, hPicture.Handle BitBlt Picture1.hdc, i, 0, hPicture.Width, hPicture.Height, hMemDC, 0, 0, vbSrcCopy '坐标自己算吧 DeleteObject hPicture.Handle
DeleteDC hMemDC
next
Picture1.Refresh
SavePicture Picture1.Image, App.Path + "\2.bmp"
Set hPicture = Nothingapi声明如下:
Public Type BITMAP
bmType As Long
bmWidth As Long
bmHeight As Long
bmWidthBytes As Long
bmPlanes As Integer
bmBitsPixel As Integer
bmBits As Long
End Type
Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Public Declare Function 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
Public Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, _
ByVal hObject As Long) As LongPublic Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As LongPublic Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
如果你的图片是BMP的话,可以直接操作BMP文件。
你可以去网上去找找关于BMP文件格式的资料看看。
当auturedraw=true时和一般的时候一样贴图片的,BITBLT也好,PAINTPICTURE也好,只是在贴完之后用PICTURE1.REFRESH来刷新一下就可以看到结果了。
其实就是一堆定义,关于BMP文件头的定义,这些都是可以直接套用的。
但是这样的话,就不能再用贴图方式来拼接了,而是要用到数据拼接了。举个形象点的例子:图片A的内容:
2 2 2
3 3 3
4 4 4图片B的内容
3 3 3
4 4 4
2 2 2上下拼:
2 2 2
3 3 3
4 4 4
3 3 3
4 4 4
2 2 2水平拼:
2 2 2 3 3 3
3 3 3 4 4 4
4 4 4 2 2 2在BMP文件中数据是按照先行后列方式存放的,要是你的两个图片是上下拼接还好点
如果是水平方向拼接的话,你想想看这个数组怎么合并?
不是不能解决,而是有点难度的。排错位置的话,不好意思,您的图片就是个废品了。