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

Inicializa el convertidor de formato.

Sintaxis

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*

Mapa de bits de entrada que se va a convertir

[in] dstFormat

Tipo: REFWICPixelFormatGUID

GUID de formato de píxel de destino.

[in] dither

Tipo: WICBitmapDitherType

WICBitmapDitherType usado para la conversión.

[in] pIPalette

Tipo: IWICPalette*

Paleta que se va a usar para la conversión.

[in] alphaThresholdPercent

Tipo: double

Umbral alfa que se va a usar para la conversión.

[in] paletteTranslate

Tipo: WICBitmapPaletteType

Tipo de traducción de paleta que se va a usar para la conversión.

Valor devuelto

Tipo: HRESULT

Si este método se realiza correctamente, devuelve S_OK. De lo contrario, devuelve un código de error de HRESULT.

Comentarios

Si no tiene una paleta predefinida, primero debe crear una. Use InitializeFromBitmap para crear el objeto de paleta y, a continuación, páselo junto con los demás parámetros.

dither, pIPalette, alphaThresholdPercent y paletteTranslate se usan para mitigar la pérdida de color al convertir a un formato de profundidad de bits reducido. Para las conversiones que no necesitan esta configuración, se deben usar los siguientes valores de parámetros: dither establecido en WICBitmapDitherTypeNone, pIPalette establecido en NULL, alphaThresholdPercent establecido en 0,0f y paletteTranslate establecido en WICBitmapPaletteTypeCustom.

El algoritmo básico implicado al usar un dither ordenado requiere una paleta fija, que se encuentra en la enumeración WICBitmapPaletteType , en un orden específico.

A menudo, la paleta real proporcionada para la salida puede tener una ordenación diferente o alguna ligera variación en los colores reales. Este es el caso cuando se usa la paleta de Microsoft Windows, que tiene ligeras diferencias entre las versiones de Windows.To proporcionan esto, una paleta y una traducción de paletas se proporcionan al convertidor de formato. pIPalette es la paleta de destino real que se va a usar y paletteTranslate es una paleta fija. Una vez completada la conversión, los colores se asignan de la paleta fija a los colores reales de pIPalette mediante un algoritmo de coincidencia de colores más cercano.

Si los colores de pIPalette no coinciden estrechamente con los de paletteTranslate, la asignación puede producir resultados no deseados.

WICBitmapDitherTypeOrdered4x4 puede ser útil en conversiones de formato de formato de 8 bits a formatos de 5 o 6 bits, ya que no hay ninguna manera de convertir datos de color con precisión.

WICBitmapDitherTypeErrorDiffusion selecciona el algoritmo de difusión de errores y se puede usar con cualquier paleta. Si se proporciona una paleta arbitraria, WICBitmapPaletteCustom debe pasarse como paletteTranslate. La difusión de errores suele proporcionar resultados superiores en comparación con los algoritmos de dithering ordenados, especialmente cuando se combina con la funcionalidad de generación de paletas optimizada en IWICPalette.

Al convertir un mapa de bits que tiene un canal alfa, como un gráfico de red portátil (PNG), a 8bpp, el canal alfa normalmente se omite. Los píxeles que eran transparentes en el mapa de bits original se muestran como negros en la salida final, ya que tanto transparente como negro tienen valores de píxeles de cero en los formatos respectivos.

Algunos contenidos de 8bpp pueden contener un color alfa; Por ejemplo, el formato formato de intercambio de gráficos (GIF) permite usar una sola entrada de paleta como color transparente. Para este tipo de contenido, alphaThresholdPercent especifica qué porcentaje de transparencia se debe asignar al color transparente. Dado que el valor alfa es directamente proporcional a la opacidad (no transparencia) de un píxel, alphaThresholdPercent indica qué nivel de opacidad se asigna al color totalmente transparente.

Por ejemplo, el 9,8 % implica que cualquier píxel con un valor alfa de menos de 25 se asignará al color transparente. Un valor de 100 % asigna todos los píxeles que no son totalmente opacos al color transparente. Tenga en cuenta que la paleta debe proporcionar un color transparente. Si no es así, el color "transparente" será el más cercano a cero, a menudo negro.

Ejemplos

En el ejemplo siguiente se convierte un marco de imagen en un formato 32bppPBGRA sin límite alfa o de dithering. Direct2D requiere que los orígenes de mapa de bits estén en el formato 32bppPBGRA para la representación. Para obtener un ejemplo completo en el que se muestra el uso de IWICFormatConverter, consulta el visor de imágenes de WIC mediante el ejemplo de 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 compatible Windows XP con SP2, Windows Vista [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2008 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado wincodec.h
Library Windowscodecs.lib
Archivo DLL Windowscodecs.dll