一共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,图片远大于这个尺寸。

解决方案 »

  1.   

    把picturebox的autoredraw属性设置成true Dim hPicture As Picture
        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
      

  2.   

    多贴了一点东西,BITMAP不需要。
      

  3.   

    picturebox autoredraw设置为true后bitblt就报错了 can't create autoredraw image
      

  4.   

    有什么api可以直接存图片吗?用picturebox实在头大了
      

  5.   

    我发现开始不把picturebox width height设置成5000*4000就不报错,但是存出来的图片尺寸就不对了
      

  6.   

    太大了,超出范围了。
    如果你的图片是BMP的话,可以直接操作BMP文件。
    你可以去网上去找找关于BMP文件格式的资料看看。
      

  7.   

    auturedraw=true时如何把图片顺序放到picturebox里呢?-----------------------
    当auturedraw=true时和一般的时候一样贴图片的,BITBLT也好,PAINTPICTURE也好,只是在贴完之后用PICTURE1.REFRESH来刷新一下就可以看到结果了。
      

  8.   

    超过PICTURE控件的尺寸的话,就要用BMP文件格式来直接写文件了。
    其实就是一堆定义,关于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文件中数据是按照先行后列方式存放的,要是你的两个图片是上下拼接还好点
    如果是水平方向拼接的话,你想想看这个数组怎么合并?
    不是不能解决,而是有点难度的。排错位置的话,不好意思,您的图片就是个废品了。