cambalinho Ответов: 1

C++ - GDIPLUS:: image:: save(*istream): как сохранить gif-файл?


у меня есть этот код для сохранения gif файла:
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 = ¶meterValue;

       //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

файл сохраняется, но задний цвет изменяется(автоматически). может быть, потому, что он прозрачный. я не знаю. может ли кто-нибудь дать мне совет?

Что я уже пробовал:

я попробовал использовать палитру, но безуспешно :(

1 Ответов

Рейтинг:
1

KarstenK

Вы должны установить прозрачный цвет в исходном изображении или в кодере, если это возможно.

Я нашел другое решение на MSDN.