Condividi tramite


Metodo IWICFormatConverter::Initialize (wincodec.h)

Inizializza il convertitore di formato.

Sintassi

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

Parametri

[in] pISource

Tipo: IWICBitmapSource*

Bitmap di input da convertire

[in] dstFormat

Tipo: REFWICPixelFormatGUID

GUID del formato pixel di destinazione.

[in] dither

Tipo: WICBitmapDitherType

WICBitmapDitherType usato per la conversione.

[in] pIPalette

Tipo: IWICPalette*

Tavolozza da utilizzare per la conversione.

[in] alphaThresholdPercent

Tipo: double

Soglia alfa da utilizzare per la conversione.

[in] paletteTranslate

Tipo: WICBitmapPaletteType

Tipo di conversione della tavolozza da utilizzare per la conversione.

Valore restituito

Tipo: HRESULT

Se questo metodo ha esito positivo, restituisce S_OK. In caso contrario, restituisce un codice di errore HRESULT .

Commenti

Se non si dispone di una tavolozza predefinita, è prima necessario crearne una. Usare InitializeFromBitmap per creare l'oggetto tavolozza, quindi passarlo insieme agli altri parametri.

dither, pIPalette, alphaThresholdPercent e paletteTranslate vengono usati per ridurre la perdita di colori durante la conversione in un formato di profondità di bit ridotto. Per le conversioni che non richiedono queste impostazioni, è necessario usare i valori dei parametri seguenti: dither impostato su WICBitmapDitherTypeNone, pIPalette impostato su NULL, alphaThresholdPercent impostato su 0,0f e paletteTranslate impostato su WICBitmapPaletteTypeCustom.

L'algoritmo di base coinvolto quando si usa un dither ordinato richiede una tavolozza fissa, disponibile nell'enumerazione WICBitmapPaletteType , in un ordine specifico.

Spesso, la tavolozza effettiva fornita per l'output può avere un ordinamento diverso o una leggera variazione nei colori effettivi. Questo è il caso in cui si usa la tavolozza di Microsoft Windows che presenta lievi differenze tra le versioni di Windows.To fornire per questo, una tavolozza e una conversione della tavolozza vengono date al convertitore di formato. PIPalette è la tavolozza di destinazione effettiva da usare e la tavolozzaTranslate è una tavolozza fissa. Al termine della conversione, i colori vengono mappati dalla tavolozza fissa ai colori effettivi in pIPalette usando un algoritmo di corrispondenza dei colori più vicino.

Se i colori in pIPalette non corrispondono a quelli nella tavolozzaTranslate, il mapping potrebbe produrre risultati indesiderati.

WICBitmapDitherTypeOrdered4x4 può essere utile nelle conversioni di formato da formati a 8 bit a formati a 5 o a 6 bit perché non è possibile convertire in modo accurato i dati di colore.

WICBitmapDitherTypeErrorDiffusion seleziona l'algoritmo di diffusione degli errori e può essere usato con qualsiasi tavolozza. Se viene specificata una tavolozza arbitraria, WICBitmapPaletteCustom deve essere passata come tavolozzaTranslate. La diffusione degli errori offre spesso risultati superiori rispetto agli algoritmi di dithering ordinati, soprattutto se combinati con la funzionalità di generazione della tavolozza ottimizzata in IWICPalette.

Quando si converte una bitmap con un canale alfa, ad esempio png (Portable Network Graphics), in 8bpp, il canale alfa viene in genere ignorato. Tutti i pixel trasparenti nella bitmap originale vengono visualizzati come neri nell'output finale perché sia trasparente che nero hanno valori pixel pari a zero nei rispettivi formati.

Alcuni contenuti 8bpp possono contenere un colore alfa; Ad esempio, il formato GIF (Graphics Interchange Format) consente l'uso di una singola voce di tavolozza come colore trasparente. Per questo tipo di contenuto, alphaThresholdPercent specifica la percentuale di trasparenza da mappare al colore trasparente. Poiché il valore alfa è direttamente proporzionale all'opacità (non trasparenza) di un pixel, alfaThresholdPercent indica il livello di opacità mappato al colore completamente trasparente.

Ad esempio, il 9,8% implica che qualsiasi pixel con un valore alfa inferiore a 25 verrà mappato al colore trasparente. Un valore pari al 100% esegue il mapping di tutti i pixel che non sono completamente opachi al colore trasparente. Si noti che la tavolozza deve fornire un colore trasparente. In caso contrario, il colore "trasparente" sarà quello più vicino a zero, spesso nero.

Esempio

L'esempio seguente converte un frame di immagine in un formato 32bppPBGRA senza dithering o alfa soglia. Direct2D richiede che le origini bitmap siano nel formato 32bppPBGRA per il rendering. Per un esempio completo che illustra l'uso di IWICFormatConverter, vedere l'esempio di WiC Image Viewer using Direct2D .For a full sample using the IWICFormatConverter, see the WIC Image Viewer Using Direct2D Sample.

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);

Requisiti

   
Client minimo supportato Windows XP con SP2, Windows Vista [app desktop | App UWP]
Server minimo supportato Windows Server 2008 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione wincodec.h
Libreria Windowscodecs.lib
DLL Windowscodecs.dll