i have these code for save animated gif's:
Code:
friend std::ostream& operator << (std::ostream& lhs, image& rhs)
    {
        //Create an empty IStream:
        IStream* pIStream = nullptr;
        if(CreateStreamOnHGlobal(NULL, FALSE, (LPSTREAM*)&pIStream)!=S_OK)
            DebugText("error on creating an empty IStream");

        //Create the Encoder way:
        //choose image format for save it on IStream:
        // Get encoder class id for jpg compression
        // for other compressions use
        //    image/bmp
        //    image/jpeg
        //    image/gif
        //    image/tiff
        //    image/png
        CLSID pngClsid;
        GetEncoderClsid(L"image/gif", &pngClsid);

        // Setup encoder parameters
        EncoderParameters* encoderParameters = (EncoderParameters*)malloc(sizeof(EncoderParameters) +  (rhs.framecount-1)* sizeof(EncoderParameter));
        encoderParameters->Count = 1;
        ULONG parameterValue = 50;
       // the for loop is pointless and does nothing
        encoderParameters->Parameter[0].Guid = EncoderSaveFlag;
        encoderParameters->Parameter[0].Type = EncoderParameterValueTypeLong;
        encoderParameters->Parameter[0].NumberOfValues = 1;
        encoderParameters->Parameter[0].Value = &parameterValue;

        //save the 1st frame:
        parameterValue = EncoderValueMultiFrame;
        Status            stat;
        rhs.img->SetPalette(rhs.imgPallet);
        if(rhs.img->Save(pIStream, &pngClsid, encoderParameters) != Ok)
        {
            pIStream->Release();
            MessageBox("error on saving to IStream");
        }

        for(int i=1; i<rhs.framecount;i++)
        {
            //create a new Image for save the selected frame:
            rhs.img->SetPalette(rhs.imgPallet);
            Image *img2= rhs.img;

            //Selecte the frame:
            UINT count = 0;
            count = img2->GetFrameDimensionsCount();
            vector<GUID> pDimensionIDs;
            pDimensionIDs.resize(count);
            img2->GetFrameDimensionsList(pDimensionIDs.data(), pDimensionIDs.size());
            img2->SelectActiveFrame(&pDimensionIDs[0],i);

            //save the next frames, from img2, on stream:

            if(i==rhs.framecount-1)
                parameterValue = EncoderValueLastFrame;
            else
                parameterValue = EncoderValueFrameDimensionTime;
            stat = rhs.img->SaveAdd(img2, encoderParameters);
        }
        //closing the stream:
        parameterValue = EncoderValueFlush;
        stat = rhs.img->SaveAdd(encoderParameters);

        //getting the stream size:
        STATSTG sts;
        pIStream->Stat(&sts, STATFLAG_DEFAULT);
        ULARGE_INTEGER uli = sts.cbSize;
        LARGE_INTEGER zero;
        zero.QuadPart = 0;
        int size = (int)uli.QuadPart;

        //save the stream to char*
        char* bits = new char[size];
        ULONG written;
        pIStream->Seek(zero, STREAM_SEEK_SET, NULL);
        pIStream->Read(bits, size, &written);

        if(rhs.blnSaveFile!=true)
        {
            //write the stream size on file
            lhs.write(reinterpret_cast<char*>(&size),sizeof(int));
        }

        //write pBuff data on file
        lhs.write(reinterpret_cast<char*>(bits),size);

        //clean resources
        delete[] bits;
        pIStream->Release();
        free(encoderParameters);
        return lhs;
    }
the frames are saved and the windows(browser) can read the animated gif.
my problem is the backcolor, because the orginal is white and the saved is white... i'm trying use the Palette for try correct it, but isn't
can anyone advice me?