我用3dmax作了一个动画,是飞机着陆的动画,我用若干图片的形式记录了这个动画过程,我想在vc里面调用这些图片,再恢复成动画过程,如何处理??需要用到vc里面的哪些知识??能不能给我个类似的处理程序??还有附加的一个问题是:如何将两个位图处理成为一个位图(合成)??因为我保存的图片是将一个场景分坐两个图片来保存,需要在vc下先将这两个图片合成一个图片,然后再连起来成为动画。谢谢,希望大家多交流,qq:16748096
email: gaoyoujun7777@sohu.com

解决方案 »

  1.   

    GDI/GDI+可以将图片恢复成动画,合成是数字图像处理的内容了
      

  2.   

    贴图:
    加入位图资源,假设ID = IDB_BITMAP;在OnDraw函数中加入代码如下:CBitmap bitmap;
    HBITMAP hOldBitmap;
    CDC mdc;
    bitmap.LoadBitmap(IDB_BITMAP);
    mdc.CreateCompatibleDC(pDC);
    hOldBitmap=(HBITMAP)mdc.SelectObject(&bitmap);
    pDC->BitBlt(0,0,100,100,&mdc,0,0,SRCCOPY);   //这一句是贴图的代码
    mdc.SelectObject(&hOldBitmap);
      

  3.   

    创建一个Doc/View结构的工程,加入四个位图资源(大小48*48) ,
    ID为IDB_BITMAP1-4。如下完成OnDraw函数:void CBBitmapView::OnDraw(CDC* pDC)
    {
    CBBitmapDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here CBitmap bitmap;
    HBITMAP hOldBitmap;
    CDC mdc;
    mdc.CreateCompatibleDC(pDC); for(int i=0;i<10;i++)
    {
    Sleep(100);
    bitmap.DeleteObject();
    bitmap.LoadBitmap(IDB_BITMAP1);
    hOldBitmap=(HBITMAP)mdc.SelectObject(&bitmap);
    pDC->BitBlt(100,100,48,48,&mdc,0,0,SRCCOPY);
    mdc.SelectObject(&hOldBitmap); Sleep(100);
    bitmap.DeleteObject();
    bitmap.LoadBitmap(IDB_BITMAP2);
    hOldBitmap=(HBITMAP)mdc.SelectObject(&bitmap);
    pDC->BitBlt(100,100,48,48,&mdc,0,0,SRCCOPY);
    mdc.SelectObject(&hOldBitmap); Sleep(100);
    bitmap.DeleteObject();
    bitmap.LoadBitmap(IDB_BITMAP3);
    hOldBitmap=(HBITMAP)mdc.SelectObject(&bitmap);
    pDC->BitBlt(100,100,48,48,&mdc,0,0,SRCCOPY);
    mdc.SelectObject(&hOldBitmap); Sleep(100);
    bitmap.DeleteObject();
    bitmap.LoadBitmap(IDB_BITMAP4);
    hOldBitmap=(HBITMAP)mdc.SelectObject(&bitmap);
    pDC->BitBlt(100,100,48,48,&mdc,0,0,SRCCOPY);
    mdc.SelectObject(&hOldBitmap);
    }
    }
    这只是个演示程序,实际中这样在OnDraw中用循环贴图是不好的。你在应用时可以用
    Timer处理。另外使用CBitmap对象Load另一幅图之前要DeleteObject();
      

  4.   

    简化一下:创建一个Doc/View结构的工程,加入四个位图资源(大小48*48) ,
    ID为IDB_BITMAP1-4。如下完成OnDraw函数:void CBBitmapView::OnDraw(CDC* pDC)
    {
    CBBitmapDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here CBitmap bitmap;
    HBITMAP hOldBitmap;
    CDC mdc;
    mdc.CreateCompatibleDC(pDC);         int ID[]={IDB_BITMAP1,IDB_BITMAP2,IDB_BITMAP3,IDB_BITMAP4};
    for(int i=0;i<10;i++)
    {
                  for(int j=0;j<4;j++)
                  {
    Sleep(100);
    bitmap.DeleteObject();
    bitmap.LoadBitmap(ID[j]);
    hOldBitmap=(HBITMAP)mdc.SelectObject(&bitmap);
    pDC->BitBlt(100,100,48,48,&mdc,0,0,SRCCOPY);
    mdc.SelectObject(&hOldBitmap);
                  }
    }
    }
    这只是个演示程序,实际中这样在OnDraw中用循环贴图是不好的。你在应用时可以用
    Timer处理。另外使用CBitmap对象Load另一幅图之前要DeleteObject();
      

  5.   

    你好,这位老兄:我的油箱:[email protected]
    谢谢!
      

  6.   

    你可以把动画做成AVI,直接在资源里加入不行吗
      

  7.   

    将它作成avi 格式?能不能有个原程序给我看看,或者是将程序代码 写给我?谢谢!!
      

  8.   

    sleep不行,程序会没响应的。需要同时抓消息并dispatch。
    或着用Timer.
      

  9.   

    作成Flash,再播放flash也很不错。
    我有播放flash的VC原码。下个flash SDK弄弄吧。可以生成flash文件。
      

  10.   

    3dmax不能直接生成avi动画吗?