Метод Image::Save(IStream*,constCLSID*,constEncoderParameters*) (gdiplusheaders.h)

Метод Image::Save сохраняет это изображение в потоке.

Синтаксис

Status Save(
  [in] IStream                 *stream,
  [in] const CLSID             *clsidEncoder,
  [in] const EncoderParameters *encoderParams
);

Параметры

[in] stream

Тип: IStream*

Указатель на COM-интерфейс IStream . Реализация IStream должна включать методы Seek, Read, Write и Stat .

[in] clsidEncoder

Тип: const CLSID*

Указатель на ИДЕНТИФИКАТОР CLSID , указывающий кодировщик, используемый для сохранения изображения.

[in] encoderParams

Тип: const EncoderParameters*

Необязательный элемент. Указатель на объект EncoderParameters , содержащий параметры, используемые кодировщиком. Значение по умолчанию — NULL.

Возвращаемое значение

Тип: Состояние

В случае успешного выполнения метода возвращается ОК, который является элементом перечисления Status .

Если метод завершается сбоем, он возвращает один из других элементов перечисления Status .

Комментарии

Не сохраняйте изображение в том же потоке, который использовался для создания образа. Это может привести к повреждению потока.

Image image(myStream); 
...
image.Save(myStream, ...); // Do not do this.

Примеры

В следующем примере создаются два объекта Image : один из JPEG-файла и png-файл. Код создает составной файл с двумя потоками и сохраняет два изображения в этих потоках.

Status MakeCompoundFile()
{
   IStorage* pIStorage = NULL;
   IStream* pIStream1 = NULL;
   IStream* pIStream2 = NULL;
   HRESULT hr;
   Status stat = Ok;

   // Create two Image objects from existing files.
   Image image1(L"Crayons.jpg");
   Image image2(L"Mosaic.png");

   hr = CoInitialize(NULL);
   if(FAILED(hr))
      goto Exit;

   // Create a compound file object, and get
   // a pointer to its IStorage interface.
   hr = StgCreateDocfile(
      L"CompoundFile.cmp", 
      STGM_READWRITE|STGM_CREATE|STGM_SHARE_EXCLUSIVE, 
      0, 
      &pIStorage);

   if(FAILED(hr))
      goto Exit;

   // Create a stream in the compound file.
   hr = pIStorage->CreateStream(
      L"StreamImage1",
      STGM_READWRITE|STGM_SHARE_EXCLUSIVE,
      0,
      0,
      &pIStream1);

   if(FAILED(hr))
      goto Exit;

   // Create a second stream in the compound file.
   hr = pIStorage->CreateStream(
      L"StreamImage2",
      STGM_READWRITE|STGM_SHARE_EXCLUSIVE,
      0,
      0,
      &pIStream2);

   if(FAILED(hr))
      goto Exit;

   // Get the class identifier for the JPEG encoder.
   CLSID jpgClsid;
   GetEncoderClsid(L"image/jpeg", &jpgClsid);

   // Get the class identifier for the PNG encoder.
   CLSID pngClsid;
   GetEncoderClsid(L"image/png", &pngClsid);

   // Save image1 as a stream in the compound file.
   stat = image1.Save(pIStream1, &jpgClsid);
   if(stat != Ok)
      goto Exit;

   // Save image2 as a stream in the compound file.
   stat = image2.Save(pIStream2, &pngClsid);

Exit:
   if(pIStream1)
      pIStream1->Release(); 
   if(pIStream2)
      pIStream2->Release();
   if(pIStorage)
      pIStorage->Release();

   if(stat != Ok || FAILED(hr))
      return GenericError;

   return Ok;
}

Требования

Требование Значение
Минимальная версия клиента Windows XP, Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header gdiplusheaders.h (включая Gdiplus.h)
Библиотека Gdiplus.lib
DLL Gdiplus.dll

См. также раздел

EncoderParameter

EncoderParameters

GetImageEncoders

GetImageEncodersSize

Изображение

Методы Image::Save

Методы Image::SaveAdd

Использование кодировщиков изображений и декодеров