Поделиться через


Метод IWICFormatConverter::Initialize (wincodec.h)

Инициализирует преобразователь формата.

Синтаксис

HRESULT Initialize(
  [in] IWICBitmapSource      *pISource,
  [in] REFWICPixelFormatGUID dstFormat,
  [in] WICBitmapDitherType   dither,
  [in] IWICPalette           *pIPalette,
  [in] double                alphaThresholdPercent,
  [in] WICBitmapPaletteType  paletteTranslate
);

Параметры

[in] pISource

Тип: IWICBitmapSource*

Входной растровый рисунок для преобразования

[in] dstFormat

Тип: REFWICPixelFormatGUID

GUID формата пикселей назначения.

[in] dither

Тип: WICBitmapDitherType

WiCBitmapDitherType, используемый для преобразования.

[in] pIPalette

Тип: IWICPalette*

Палитра, используемая для преобразования.

[in] alphaThresholdPercent

Тип: double

Порог альфа-канала, используемый для преобразования.

[in] paletteTranslate

Тип: WICBitmapPaletteType

Тип преобразования палитры, используемый для преобразования.

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

Тип: HRESULT

Если этот метод завершается успешно, он возвращает S_OK. В противном случае возвращается код ошибки HRESULT .

Комментарии

Если у вас нет предопределенной палитры, ее необходимо сначала создать. Используйте InitializeFromBitmap , чтобы создать объект палитры, а затем передайте его вместе с другими параметрами.

Dither, pIPalette, alphaThresholdPercent и paletteTranslate используются для уменьшения потери цвета при преобразовании в формат с уменьшенной битовой глубиной. Для преобразований, которым не требуются эти параметры, следует использовать следующие значения параметров: dither set to WICBitmapDitherTypeNone, pIPaletteNULL, alphaThresholdPercent0.0f и paletteTranslateWICBitmapPaletteTypeCustom.

Для базового алгоритма, используемого при использовании упорядоченного дизера, требуется фиксированная палитра в перечислении WICBitmapPaletteType в определенном порядке.

Часто фактическая палитра, предоставляемая для выходных данных, может иметь другой порядок или небольшое отклонение фактических цветов. Это происходит при использовании палитры Microsoft Windows, которая имеет небольшие различия между версиями Windows.To обеспечить это, палитра и перевод палитры предоставляются преобразователю форматов. PIPalette — это фактически используемая палитра назначения, а paletteTranslate — фиксированная палитра. После завершения преобразования цвета сопоставляются с фиксированной палитрой с фактическими цветами в pIPalette с помощью ближайшего алгоритма сопоставления цветов.

Если цвета в pIPalette не соответствуют цветам в paletteTranslate, сопоставление может привести к нежелательным результатам.

WICBitmapDitherTypeOrdered4x4 может быть полезен при преобразовании форматов из 8-разрядных форматов в 5- или 6-разрядные, так как нет способа точного преобразования цветовых данных.

WICBitmapDitherTypeErrorDiffusion выбирает алгоритм диффузии ошибок и может использоваться с любой палитрой. Если указана произвольная палитра, wiCBitmapPaletteCustom следует передать в качестве paletteTranslate. Диффузия ошибок часто обеспечивает превосходные результаты по сравнению с упорядоченными алгоритмами смешивания, особенно в сочетании с оптимизированной функциональностью создания палитры на IWICPalette.

При преобразовании растрового изображения с альфа-каналом, например PNG, в формат 8bpp альфа-канал обычно игнорируется. Все пиксели, которые были прозрачными в исходном растровом изображении, отображаются как черные в выходных данных, так как прозрачные и черные имеют нулевое значение пикселей в соответствующих форматах.

Некоторые содержимое 8bpp может содержать альфа-цвет; Например, формат GIF позволяет использовать одну запись палитры в качестве прозрачного цвета. Для этого типа содержимого alphaThresholdPercent указывает, какой процент прозрачности должен соответствовать прозрачному цвету. Поскольку альфа-значение прямо пропорционально непрозрачности (не прозрачности) пикселя, alphaThresholdPercent указывает, какой уровень непрозрачности сопоставляется с полностью прозрачным цветом.

Например, значение 9,8 % означает, что любой пиксель с альфа-значением меньше 25 будет сопоставлен с прозрачным цветом. Значение 100 % сопоставляет все непрозрачные пиксели с прозрачным цветом. Обратите внимание, что палитра должна иметь прозрачный цвет. Если это не так, "прозрачный" цвет будет ближайшим к нулю - часто черный.

Примеры

В следующем примере кадр изображения преобразуется в формат 32bppPBGRA без порогового значения dithering или alpha. Direct2D требует, чтобы источники растровых изображений были в формате 32bppPBGRA для отрисовки. Полный пример использования IWICFormatConverter см. в разделе WiC Image Viewer Using Direct2D Sample (Пример средства просмотра изображений WIC с использованием Direct2D).

HRESULT hr = S_OK;

IWICBitmapDecoder *pIDecoder = NULL;
IWICBitmapFrameDecode *pIDecoderFrame  = NULL;
IWICFormatConverter *pIFormatConverter = NULL;

// Create the decoder.
hr = m_pIWICFactory->CreateDecoderFromFilename(
   L"turtle.jpg",                  // Image to be decoded
   NULL,                           // Do not prefer a particular vendor
   GENERIC_READ,                   // Desired read access to the file
   WICDecodeMetadataCacheOnDemand, // Cache metadata when needed
   &pIDecoder                      // Pointer to the decoder
   );

// Retrieve the first bitmap frame.
if (SUCCEEDED(hr))
{
   hr = pIDecoder->GetFrame(0, &pIDecoderFrame);
}


// Create the flip/rotator.
if (SUCCEEDED(hr))
{
   hr = m_pIWICFactory->CreateFormatConverter(&pIFormatConverter);
}

// Initialize the format converter.
if (SUCCEEDED(hr))
{
   hr = pIFormatConverter->Initialize(
       pIDecoderFrame,                  // Input source to convert
       GUID_WICPixelFormat32bppPBGRA,   // Destination pixel format
       WICBitmapDitherTypeNone,         // Specified dither pattern
       NULL,                            // Specify a particular palette 
       0.f,                             // Alpha threshold
       WICBitmapPaletteTypeCustom       // Palette translation type
       );
}
//Create render target and D2D bitmap from IWICBitmapSource
if (SUCCEEDED(hr))
{
   hr = CreateDeviceResources(hWnd);
}

if (SUCCEEDED(hr))
{
   // Need to release the previous D2DBitmap if there is one
   SafeRelease(&m_pD2DBitmap);
   hr = m_pRT->CreateBitmapFromWicBitmap(pIFormatConverter, NULL, &m_pD2DBitmap);
}

SafeRelease(&pIFormatConverter);
SafeRelease(&pIDecoderFrame);
SafeRelease(&pIDecoder);

Требования

   
Минимальная версия клиента Windows XP с пакетом обновления 2 (SP2), Windows Vista [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2008 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header wincodec.h
Библиотека Windowscodecs.lib
DLL Windowscodecs.dll