大家好,现在看到电子像册多的很,觉得很好奇,有想不明白,所以来大家讨论讨论
如何把好多照片按照一定的方式生成一个mpg的文件,再加上背景音乐.或者在现有的视频mpg文件中,按照一定的规则加上照片显示一下呢?

解决方案 »

  1.   

    可以的,可以用微软提供的AVI文件读写的一系列函数,将你的静态图片写成视频文件,如果你想采用压缩方式,可以用mpeg2, 或者mpeg4 ,divx ,等等
      

  2.   

    下面的函数演示了如何将一个文件夹下面的所有bmp文件都保存为一个avi文件,
    //生成avi
    Void  BMPtoAVI(CString szAVIName, CString strBmpDir)
    {
    CFileFind  finder;
    strBmpDir += _T("\\*.*"); 
    AVIFileInit();
    AVISTREAMINFO strhdr;
    PAVIFILE pfile;
    PAVISTREAM ps; 
    int nFrames =0; 
    HRESULT hr;  BOOL  bFind = finder.FindFile(strBmpDir);
    while(bFind)
    {
    bFind = finder.FindNextFile();
    if(!finder.IsDots() && !finder.IsDirectory())
    {
    CString str = finder.GetFilePath();
    FILE *fp = fopen(str,"rb");
    BITMAPFILEHEADER bmpFileHdr;
    BITMAPINFOHEADER bmpInfoHdr;
    fseek( fp,0,SEEK_SET);
    fread(&bmpFileHdr,sizeof(BITMAPFILEHEADER),1, fp);
    fread(&bmpInfoHdr,sizeof(BITMAPINFOHEADER),1, fp); BYTE *tmp_buf = NULL;
    if(nFrames ==0 )
    {
      AVIFileOpen(&pfile,szAviName,OF_WRITE | OF_CREATE,NULL);
    _fmemset(&strhdr, 0, sizeof(strhdr));
    strhdr.fccType                = streamtypeVIDEO;// stream type
    strhdr.fccHandler             = 0;
    strhdr.dwScale                = 1;
    strhdr.dwRate                 = 15;     // 15 fps
    strhdr.dwSuggestedBufferSize  = bmpInfoHdr.biSizeImage ;
    SetRect(&strhdr.rcFrame, 0, 0, bmpInfoHdr.biWidth, bmpInfoHdr.biHeight); // And create the stream;
    hr = AVIFileCreateStream(pfile,&ps,&strhdr);     
                   // hr = AVIStreamSetFormat(ps,nFrames,&bmpInfoHdr,sizeof(bmpInfoHdr));
      }
    tmp_buf = new BYTE[bmpInfoHdr.biWidth * bmpInfoHdr.biHeight * 3];
       fread(tmp_buf, 1, bmpInfoHdr.biWidth * bmpInfoHdr.biHeight * 3, fp);
    hr = AVIStreamSetFormat(ps,nFrames,&bmpInfoHdr,sizeof(bmpInfoHdr));
    hr = AVIStreamWrite(ps, // stream pointer
             nFrames , // time of this frame
    1, // number to write
    (LPBYTE) tmp_buf,
    bmpInfoHdr.biSizeImage  , // size of this frame
    AVIIF_KEYFRAME,  // flags....
    NULL,
    NULL); nFrames ++; 
    fclose(fp);
    }
    } AVIStreamClose(ps);  if(pfile != NULL)
          AVIFileRelease(pfile);  AVIFileExit();
    }
      

  3.   

    谢谢了楼上的兄弟.如果是这样呢,我做好一个摸板mpg片段,里面有几幅图片的变换和一些背景,如果把里面变换的图片替换成我想要的图片呢?能不能做到,具体应该怎么走,望指点一下.
      

  4.   

    也就是如何往一个mpg文件里面加如一幅图片,什么时间加?如何用程序来控制呢?
      

  5.   

    这个没有什么难度!
    今年国庆放假前的两天晚上我给别人做了一个类似的程序,对方给了4000RMB
    就是一个解码编码的过程!
    但是考虑到效率问题,就有难度了