怎样将多幅图片结合在一起生成AVI文件!通过其它播放软件可直接播放

解决方案 »

  1.   

    呵呵,flash可以, 没有做过,关注一下!~
      

  2.   

    // 给你一个例子程序,可以将000.bmp, 001.bmp,002.bmp...等图片压成AVI文件。
    // 详细请参考MSDN中Video for Windows的说明
    BOOL SaveAVI()
    {
    PAVIFILE pf = NULL; // AVI File.
    PAVISTREAM  ps = NULL; // AVI Stream.
    PAVISTREAM  psCompressed = NULL; // AVI Stream for Commpression.
    HRESULT hr = NULL; 
    BOOL br = TRUE;
    LONG nImageNO = 0;
    int     NumOfImages = 10; // 10 Images// Initialize the AVI library.
    AVIFileInit();

    // Create new AVI file using AVIFileOpen. 
    hr = AVIFileOpen(&pf, "Sample AVI.avi", OF_WRITE | OF_CREATE, NULL); 
    if (hr != 0)  goto EXIT_AVI;

    for (nImageNO = 0; nImageNO < NumOfImages; nImageNO++) 

    TCHAR strFileName[10];
    sprintf("%.3d.bmp", strFileName); // Read the stream data. 
    CFile SrcFile(strFileName, CFile::modeRead);
    UINT  FileLength = SrcFile.GetLength();
    SrcFile.Seek(sizeof(BITMAPFILEHEADER), CFile::begin); // Windows DIB format.
    HGLOBAL hDIB = 
                   GlobalAlloc(GMEM_MOVEABLE, FileLength - sizeof(BITMAPFILEHEADER));
    CHAR* pBuffer = (CHAR*)GlobalLock(hDIB);
    SrcFile.Read(pBuffer, FileLength - sizeof(BITMAPFILEHEADER));

    BITMAPINFO * pInfo =(BITMAPINFO*)pBuffer;
    CHAR * pBits = 
       (CHAR*) pInfo + sizeof(BITMAPINFOHEADER) +  
                 pInfo->bmiHeader.biClrUsed * sizeof(RGBQUAD); // And create the stream. This job will be done only once.
    if (nImageNO == 0) 
             { 
    AVISTREAMINFO    strhdr; 
    memset(&strhdr, 0, sizeof(strhdr));

    strhdr.fccType = streamtypeVIDEO;
    strhdr.fccHandler = 0;
    strhdr.dwFlags = NULL;
    strhdr.dwCaps     = NULL;
    strhdr.wPriority = NULL;
    strhdr.wLanguage = NULL;
    strhdr.dwScale = 1;
    strhdr.dwRate = 25;         // Frames per second
    strhdr.dwStart = 0;
    strhdr.dwLength = NumOfImages;
    strhdr.dwInitialFrames = 0;
    strhdr.dwSuggestedBufferSize = pInfo->bmiHeader.biSizeImage;
    strhdr.dwQuality    = 10000;
    strhdr.dwSampleSize  = 0;
    strhdr.dwEditCount  = 0;
    strhdr.dwFormatChangeCount = 0;
    strcpy(strhdr.szName, "AVI VIDEO #1");
    SetRect(&strhdr.rcFrame, 0, 0, 
    (int)(pInfo->bmiHeader.biWidth), 
                                (int)(pInfo->bmiHeader.biHeight));

    // Create a stream using AVIFileCreateStream. 
    hr = AVIFileCreateStream(pf, &ps, &strhdr); 
    if (hr != 0)
    goto EXIT_AVI;

    AVICOMPRESSOPTIONS opts;
    AVICOMPRESSOPTIONS FAR * aopts[1] = {&opts};
    memset(&opts, 0, sizeof(opts));

    br = AVISaveOptions(
                          NULL, 0, 1, &ps, (LPAVICOMPRESSOPTIONS FAR *) &aopts);
    if (!br) goto EXIT_AVI; hr = AVIMakeCompressedStream(&psCompressed, ps, &opts, NULL);
    if (hr != 0) goto EXIT_AVI;

    // Set format of new stream using AVIStreamSetFormat. 
    hr = AVIStreamSetFormat(
                           ps, 0, &(pInfo->bmiHeader),
                           pInfo->bmiHeader.biSize + 
                           pInfo->bmiHeader.biClrUsed * sizeof(RGBQUAD)); 
    if (hr != 0) goto EXIT_AVI;
    }

    // Save the data using AVIStreamWrite. 
    hr = AVIStreamWrite(ps, nImageNO, 1, pBits, 
    pInfo->bmiHeader.biSizeImage, AVIIF_KEYFRAME, NULL, NULL); 
    ASSERT(hr == 0);

    GlobalUnlock(hDIB);
    GlobalFree(hDIB);


    EXIT_AVI:

    // Close the stream and file. 
        if (psCompressed) 
    AVIStreamRelease(psCompressed);

        if (ps) 
    AVIStreamRelease(ps); 

        if (pf) 
    AVIFileRelease(pf); 

    AVIFileExit();

    if (hr == 0 && br == TRUE)
    return TRUE;
    else
    return FALSE;
    }
      

  3.   

    忘了::
    Header: Declared in Vfw.h.
    Library: Use Vfw32.lib.
      

  4.   

    写的匆忙
    sprintf("%.3d.bmp", strFileName);改成sprintf(strFileName, "%.3d.bmp", nImageNO);如果文件不存在,可能会造成错误,请注意判断。