Share via


Método IWICFormatConverter::Initialize (wincodec.h)

Inicializa o conversor de formato.

Sintaxe

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

Parâmetros

[in] pISource

Tipo: IWICBitmapSource*

O bitmap de entrada a ser convertido

[in] dstFormat

Tipo: REFWICPixelFormatGUID

O GUID de formato de pixel de destino.

[in] dither

Tipo: WICBitmapDitherType

O WICBitmapDitherType usado para conversão.

[in] pIPalette

Tipo: IWICPalette*

A paleta a ser usada para conversão.

[in] alphaThresholdPercent

Tipo: duplo

O limite alfa a ser usado para conversão.

[in] paletteTranslate

Tipo: WICBitmapPaletteType

O tipo de tradução de paleta a ser usado para conversão.

Valor retornado

Tipo: HRESULT

Se o método for bem-sucedido, ele retornará S_OK. Caso contrário, ele retornará um código de erro HRESULT.

Comentários

Se você não tiver uma paleta predefinida, primeiro crie uma. Use InitializeFromBitmap para criar o objeto de paleta e, em seguida, passe-o junto com seus outros parâmetros.

dither, pIPalette, alphaThresholdPercent e paletteTranslate são usados para atenuar a perda de cor ao converter em um formato de profundidade de bit reduzido. Para conversões que não precisam dessas configurações, os seguintes valores de parâmetros devem ser usados: dither definido como WICBitmapDitherTypeNone, pIPalette definido como NULL, alphaThresholdPercent definido como 0,0f e paletteTranslate definido como WICBitmapPaletteTypeCustom.

O algoritmo básico envolvido ao usar um dither ordenado requer uma paleta fixa, encontrada na enumeração WICBitmapPaletteType , em uma ordem específica.

Geralmente, a paleta real fornecida para a saída pode ter uma ordenação diferente ou alguma pequena variação nas cores reais. Esse é o caso ao usar a paleta do Microsoft Windows que tem pequenas diferenças entre as versões de Windows.To fornecer para isso, uma paleta e uma tradução de paleta são dadas ao conversor de formato. O pIPalette é a paleta de destino real a ser usada e a paletteTranslate é uma paleta fixa. Depois que a conversão for concluída, as cores serão mapeadas da paleta fixa para as cores reais em pIPalette usando um algoritmo de correspondência de cores mais próximo.

Se as cores em pIPalette não corresponderem de perto às de paletteTranslate, o mapeamento poderá produzir resultados indesejáveis.

WICBitmapDitherTypeOrdered4x4 pode ser útil em conversões de formato de formatos de 8 bits para formatos de 5 ou 6 bits, pois não há como converter dados de cor com precisão.

WICBitmapDitherTypeErrorDiffusion seleciona o algoritmo de difusão de erro e pode ser usado com qualquer paleta. Se uma paleta arbitrária for fornecida, WICBitmapPaletteCustom deverá ser passada como a paletaTranslate. A difusão de erros geralmente fornece resultados superiores em comparação com os algoritmos de dithering ordenados, especialmente quando combinados com a funcionalidade de geração de paleta otimizada no IWICPalette.

Ao converter um bitmap que tem um canal alfa, como um PNG (Portable Network Graphics), em 8bpp, o canal alfa normalmente é ignorado. Todos os pixels que foram transparentes no bitmap original aparecem como pretos na saída final porque transparente e preto têm valores de pixel de zero nos respectivos formatos.

Alguns conteúdos de 8bpp podem conter uma cor alfa; por exemplo, o formato GIF (Graphics Interchange Format) permite que uma única entrada de paleta seja usada como uma cor transparente. Para esse tipo de conteúdo, alphaThresholdPercent especifica qual porcentagem de transparência deve ser mapeada para a cor transparente. Como o valor alfa é diretamente proporcional à opacidade (não à transparência) de um pixel, alphaThresholdPercent indica qual nível de opacidade é mapeado para a cor totalmente transparente.

Por exemplo, 9,8% implica que qualquer pixel com um valor alfa inferior a 25 será mapeado para a cor transparente. Um valor de 100% mapeia todos os pixels que não são totalmente opacos para a cor transparente. Observe que a paleta deve fornecer uma cor transparente. Se isso não acontecer, a cor "transparente" será a mais próxima de zero - muitas vezes preta.

Exemplos

O exemplo a seguir converte um quadro de imagem em um formato 32bppPBGRA sem limite de dithering ou alfa. O Direct2D exige que as fontes de bitmap estejam no formato 32bppPBGRA para renderização. Para obter um exemplo completo que demonstra o uso do IWICFormatConverter, consulte o Visualizador de Imagens wic usando o exemplo 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);

Requisitos

   
Cliente mínimo com suporte Windows XP com SP2, Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho wincodec.h
Biblioteca Windowscodecs.lib
DLL Windowscodecs.dll