Search code examples
c++flashdllcaa

How to create .swf file from multi .JPG images using swflib library in Visual C++?


I'm writing a c++ code to create a animate SWF file from multi JPG pictures.

Now, I have pictures like "image_0" to "image_100". I find a swflib library. I think it will help. So far, I can use this library's method to create .SWF file and the size of .SWF file is the sum of pictures in .JPG format.

So, I think I almost done. But ,SWF does not play. I am crazy. Below this is the code which I modified:

`void CSWFLIBTestProjectDlg::CreateSWFMovie_Bitmap()
{
    // Set movie params
    SIZE_F movieSize = {100, 100};
    int frameRate = 14;
    POINT_F pt;

    // Create empty .SWF file
    CSWFMovie swfMovie;

    swfMovie.OpenSWFFile(_T("SWF Sample Movies/Sample2.swf"), movieSize, frameRate);

    SWF_RGB bgColor = {255, 255, 255};
    swfMovie.SetBackgroundColor(bgColor);

    // Define bitmap object
    CSWFBitmap bitmap(2, (UCHAR*)"gif_0.jpg");//bm128
    swfMovie.DefineObject(&bitmap, -1, true);

    // Define custom shape
    RECT_F shapeRect = {0, 0, 1000, 1000};
    CSWFShape shape(1, shapeRect, 1);
    SWF_RGBA lineColor = {0, 0, 0, 255};
    shape.AddLineStyle(0, lineColor);
    RECT_F bitmapRect = {0, 0, 1246, 622};                              // size of the bitmap
    RECT_F clipRect = {0, 0, 100, 100};                                 // where to fill
    shape.AddBitmapFillStyle(bitmap.m_ID, SWF_FILLSTYLETYPE_BITMAP_0, bitmapRect, clipRect);
    pt.x = 0;
    pt.y = 0;
    shape.ChangeStyle(1, 1, 0, &pt);
    shape.AddLineSegment(100, 0);
    shape.AddLineSegment(0, 100);
    shape.AddLineSegment(-100, 0);
    shape.AddLineSegment(0, -100);


    swfMovie.DefineObject(&shape, shape.m_Depth, true);

    swfMovie.ShowFrame();
    /****************************************
    *   move
    ****************************************/
    float i;
    for (i=0; i<10; i++)
    {
        shape.Translate(i, 0);
        swfMovie.UpdateObject(&shape, shape.m_Depth, NULL, -1);
        swfMovie.ShowFrame();
        //if (i>200)
        //{ 
        //  swfMovie.RemoveObject(shape.m_Depth);

        //}

    }


/****************************************
 *  add jpg
 ****************************************/

    swfMovie.RemoveObject(shape.m_Depth);

    for (int i=1;i<=100;i++)
    {
        char filename[100]; 
        sprintf(filename,"gif_%d%s",i,".jpg");

        CSWFBitmap bitmap2(3, (UCHAR*)filename);//gif_0
        swfMovie.DefineObject(&bitmap2, -1, true);//

        // Define custom shape
        RECT_F shapeRect2 = {0, 0, 1000, 1000};
        CSWFShape shape2(1, shapeRect2, 1);
        SWF_RGBA lineColor2 = {0, 0, 0, 255};
        shape2.AddLineStyle(0, lineColor2);
        RECT_F bitmapRect2 = {0, 0, 1246, 622};                             // size of the bitmap
        RECT_F clipRect2 = {0, 0, 100, 100};                                    // where to fill
        shape2.AddBitmapFillStyle(bitmap2.m_ID, SWF_FILLSTYLETYPE_BITMAP_0, bitmapRect2, clipRect2);
        pt.x = 0;
        pt.y = 0;
        shape2.ChangeStyle(1, 1, 0, &pt);
        shape2.AddLineSegment(100, 0);
        shape2.AddLineSegment(0, 100);
        shape2.AddLineSegment(-100, 0);
        shape2.AddLineSegment(0, -100);

        swfMovie.UpdateObject(&shape2, shape2.m_Depth, NULL, -1);
        //swfMovie.DefineObject(&shape2, shape2.m_Depth, true);

        swfMovie.ShowFrame(); 
        //swfMovie.RemoveObject(shape2.m_Depth);


    }








    // Close .SWF file
    swfMovie.CloseSWFFile();
}`

can you tell me what's wrong with my code ? Thanks in advance.


Solution

  • I have found a way to create a .SWF file from a set of image using C++,and a swflib library.you can download it from the lib file website .in which there is a method named :CreateSWFMovie_Bitmap() here is the code i modified

    void CSWFLIBTestProjectDlg::CreateSWFMovie_Bitmap() {

    SIZE_F movieSize = {4000, 4000};
    int frameRate = 40;
    POINT_F pt;
    
    
    CSWFMovie swfMovie;
    swfMovie.OpenSWFFile(_T("SWF Sample Movies/Sample2.swf"), movieSize, frameRate);
    SWF_RGB bgColor = {255, 255, 255};
    swfMovie.SetBackgroundColor(bgColor);
    
    
    CSWFBitmap bitmap(2, (UCHAR*)"bm128.jpg");
    swfMovie.DefineObject(&bitmap, -1, false);
    
    
    RECT_F shapeRect = {0, 0, 1000, 1000};//shape大小
    CSWFShape shape(1, shapeRect, 1);
    SWF_RGBA lineColor = {0, 0, 0, 255};
    shape.AddLineStyle(3, lineColor);
    RECT_F bitmapRect = {0, 0, 128, 128};                               // size of the bitmap
    RECT_F clipRect = {0, 0, 100, 100};                                 // where to fill
    shape.AddBitmapFillStyle(bitmap.m_ID, SWF_FILLSTYLETYPE_BITMAP_0, bitmapRect, clipRect);
    pt.x = 0;
    pt.y = 0;
    shape.ChangeStyle(1, 1, 0, &pt);
    shape.AddLineSegment(100, 0);
    shape.AddLineSegment(0, 100);
    shape.AddLineSegment(-100, 0);
    shape.AddLineSegment(0, -100);
    swfMovie.DefineObject(&shape, shape.m_Depth, true);
    swfMovie.ShowFrame();
    
    
    
    for (int i=0; i<100; i++)
    {
        char filename[50]=""; 
        sprintf(filename,"gif_%d%s",i,".jpg");
        CSWFBitmap bitmap2(300+i, (UCHAR*)filename);
        swfMovie.DefineObject(&bitmap2, -1, false);//false
        CSWFShape shape2(7+i,shapeRect,2+i);//depth值也不能一样 id不能重复
        shape2.AddLineStyle(3, lineColor);
        RECT_F bitmapRect2 = {0, 0, 128, 128};                              
        RECT_F clipRect2 = {0, 0, 100, 100};                                    
        shape2.AddBitmapFillStyle(bitmap2.m_ID, SWF_FILLSTYLETYPE_BITMAP_0, bitmapRect2, clipRect2);
    
        pt.x = 0;
        pt.y = 0;
        shape2.ChangeStyle(1, 1, 0, &pt);
        shape2.AddLineSegment(1000, 0);
        shape2.AddLineSegment(0, 1000);
        shape2.AddLineSegment(-1000, 0);
        shape2.AddLineSegment(0, -1000);
        shape2.Translate(80, 0);
        swfMovie.DefineObject(&shape2, shape2.m_Depth, true);//必须define才能动 可以不update
    
        swfMovie.ShowFrame();
    
    
    }
    

    }