IWICFormatConverter::Initialize, méthode (wincodec.h)

Initialise le convertisseur de format.

Syntaxe

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

Paramètres

[in] pISource

Type : IWICBitmapSource*

Bitmap d’entrée à convertir

[in] dstFormat

Type : REFWICPixelFormatGUID

GUID de format de pixel de destination.

[in] dither

Type : WICBitmapDitherType

WICBitmapDitherType utilisé pour la conversion.

[in] pIPalette

Type : IWICPalette*

Palette à utiliser pour la conversion.

[in] alphaThresholdPercent

Type : double

Seuil alpha à utiliser pour la conversion.

[in] paletteTranslate

Type : WICBitmapPaletteType

Type de traduction de palette à utiliser pour la conversion.

Valeur retournée

Type : HRESULT

Si cette méthode réussit, elle retourne S_OK. Sinon, elle retourne un code d’erreur HRESULT.

Remarques

Si vous n’avez pas de palette prédéfinie, vous devez d’abord en créer une. Utilisez InitializeFromBitmap pour créer l’objet de palette, puis passez-le avec vos autres paramètres.

dither, pIPalette, alphaThresholdPercent et paletteTranslate sont utilisés pour atténuer la perte de couleur lors de la conversion en format à profondeur de bits réduite. Pour les conversions qui n’ont pas besoin de ces paramètres, les valeurs de paramètres suivantes doivent être utilisées : dither défini sur WICBitmapDitherTypeNone, pIPalette défini sur NULL, alphaThresholdPercent défini sur 0,0f et paletteTranslate défini sur WICBitmapPaletteTypeCustom.

L’algorithme de base impliqué lors de l’utilisation d’un dither ordonné nécessite une palette fixe, trouvée dans l’énumération WICBitmapPaletteType , dans un ordre spécifique.

Souvent, la palette réelle fournie pour la sortie peut avoir un ordre différent ou une légère variation dans les couleurs réelles. C’est le cas lors de l’utilisation de la palette Microsoft Windows, qui présente de légères différences entre les versions de Windows.To fournir pour cela, une palette et une traduction de palette sont données au convertisseur de format. La pIPalette est la palette de destination réelle à utiliser et la paletteTranslate est une palette fixe. Une fois la conversion terminée, les couleurs sont mappées de la palette fixe aux couleurs réelles dans pIPalette à l’aide d’un algorithme de correspondance de couleurs le plus proche.

Si les couleurs de pIPalette ne correspondent pas étroitement à celles de paletteTranslate, le mappage peut produire des résultats indésirables.

WICBitmapDitherTypeOrdered4x4 peut être utile dans les conversions de formats 8 bits en formats 5 ou 6 bits, car il n’existe aucun moyen de convertir avec précision les données de couleur.

WICBitmapDitherTypeErrorDiffusion sélectionne l’algorithme de diffusion d’erreurs et peut être utilisé avec n’importe quelle palette. Si une palette arbitraire est fournie, WICBitmapPaletteCustom doit être passé en tant que paletteTranslate. La diffusion d’erreurs fournit souvent des résultats supérieurs par rapport aux algorithmes de dithering ordonnés, en particulier lorsqu’elle est combinée à la fonctionnalité de génération de palette optimisée sur IWICPalette.

Lors de la conversion d’une bitmap qui a un canal alpha, tel qu’un graphique png (Portable Network Graphics), en 8bpp, le canal alpha est normalement ignoré. Tous les pixels qui étaient transparents dans l’image bitmap d’origine s’affichent en noir dans la sortie finale, car transparent et noir ont des valeurs de pixels égales à zéro dans les formats respectifs.

Un contenu 8bpp peut contenir une couleur alpha ; pour instance, le format GIF (Graphics Interchange Format) permet d’utiliser une seule entrée de palette comme couleur transparente. Pour ce type de contenu, alphaThresholdPercent spécifie quel pourcentage de transparence doit être mappé à la couleur transparente. Étant donné que la valeur alpha est directement proportionnelle à l’opacité (et non à la transparence) d’un pixel, l’alphaThresholdPercent indique quel niveau d’opacité est mappé à la couleur entièrement transparente.

Pour instance, 9,8 % implique que tout pixel ayant une valeur alpha inférieure à 25 sera mappé à la couleur transparente. Une valeur de 100 % mappe tous les pixels qui ne sont pas entièrement opaques à la couleur transparente. Notez que la palette doit fournir une couleur transparente. Si ce n’est pas le cas, la couleur « transparente » sera la plus proche de zéro , souvent noire.

Exemples

L’exemple suivant convertit un cadre d’image au format 32bppPBGRA sans dithering ni seuil alpha. Direct2D nécessite que les sources bitmap soient au format 32bppPBGRA pour le rendu. Pour obtenir un exemple complet illustrant l’utilisation de IWICFormatConverter, consultez la visionneuse d’images WIC à l’aide de l’exemple 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);

Configuration requise

   
Client minimal pris en charge Windows XP avec SP2, Windows Vista [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2008 [applications de bureau | applications UWP]
Plateforme cible Windows
En-tête wincodec.h
Bibliothèque Windowscodecs.lib
DLL Windowscodecs.dll