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 |