Freigeben über


IWICFormatConverter::Initialize-Methode (wincodec.h)

Initialisiert den Formatkonverter.

Syntax

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

Parameter

[in] pISource

Typ: IWICBitmapSource*

Die zu konvertierende Eingabebitbitbit

[in] dstFormat

Typ: REFWICPixelFormatGUID

Die Zielpixelformat-GUID.

[in] dither

Typ: WICBitmapDitherType

Der wicBitmapDitherType, der für die Konvertierung verwendet wird.

[in] pIPalette

Typ: IWICPalette*

Die Palette, die für die Konvertierung verwendet werden soll.

[in] alphaThresholdPercent

Typ: double

Der Alphaschwellenwert, der für die Konvertierung verwendet werden soll.

[in] paletteTranslate

Typ: WICBitmapPaletteType

Der Für die Konvertierung zu verwendende Palettenübersetzungstyp.

Rückgabewert

Typ: HRESULT

Wenn diese Methode erfolgreich ist, wird S_OK zurückgegeben. Andernfalls wird ein Fehlercode HRESULT zurückgegeben.

Hinweise

Wenn Sie nicht über eine vordefinierte Palette verfügen, müssen Sie zuerst eine erstellen. Verwenden Sie InitializeFromBitmap , um das Palettenobjekt zu erstellen, und übergeben Sie es dann zusammen mit Ihren anderen Parametern.

dither, pIPalette, alphaThresholdPercent und paletteTranslate werden verwendet, um Farbverluste bei der Konvertierung in ein Format mit geringerer Bittiefe zu minimieren. Für Konvertierungen, die diese Einstellungen nicht benötigen, sollten die folgenden Parameterwerte verwendet werden: dither auf WICBitmapDitherTypeNone, pIPalette auf NULL, alphaThresholdPercent auf 0,0f und paletteTranslate auf WICBitmapPaletteTypeCustom festgelegt.

Der grundlegende Algorithmus, der bei der Verwendung eines geordneten Dithers verwendet wird, erfordert eine feste Palette, die in der WICBitmapPaletteType-Enumeration in einer bestimmten Reihenfolge zu finden ist.

Häufig kann die tatsächliche Palette, die für die Ausgabe bereitgestellt wird, eine andere Reihenfolge oder eine geringfügige Variation der tatsächlichen Farben aufweisen. Dies ist der Fall, wenn Sie die Microsoft Windows-Palette verwenden, die geringfügige Unterschiede zwischen den Versionen von Windows.To dafür bietet, dass dem Formatkonverter eine Palette und eine Palettenübersetzung zugewiesen werden. Die pIPalette ist die tatsächliche Zielpalette, die verwendet werden soll, und die paletteTranslate ist eine feste Palette. Sobald die Konvertierung abgeschlossen ist, werden die Farben von der festen Palette den tatsächlichen Farben in pIPalette mithilfe eines Farbabgleichsalgorithmus am nächsten zugeordnet.

Wenn Farben in pIPalette nicht genau mit denen in paletteTranslate übereinstimmen, kann die Zuordnung zu unerwünschten Ergebnissen führen.

WICBitmapDitherTypeOrdered4x4x4 kann bei Formatkonvertierungen von 8-Bit-Formaten in 5- oder 6-Bit-Formate nützlich sein, da es keine Möglichkeit gibt, Farbdaten genau zu konvertieren.

WICBitmapDitherTypeErrorDiffusion wählt den Fehlerdiffusion-Algorithmus aus und kann mit jeder Palette verwendet werden. Wenn eine beliebige Palette bereitgestellt wird, sollte WICBitmapPaletteCustom als paletteTranslate übergeben werden. Fehlerdiffusion liefert häufig überlegene Ergebnisse im Vergleich zu den geordneten Ditheringalgorithmen, insbesondere in Kombination mit der optimierten Palettengenerierungsfunktion der IWICPalette.

Beim Konvertieren einer Bitmap mit einem Alphakanal, z. B. png (Portable Network Graphics), in 8bpp wird der Alphakanal normalerweise ignoriert. Alle Pixel, die in der ursprünglichen Bitmap transparent waren, werden in der endgültigen Ausgabe als schwarz angezeigt, da sowohl transparent als auch schwarz pixelige Werte von 0 (null) in den jeweiligen Formaten aufweisen.

Einige 8bpp-Inhalte können eine Alphafarbe enthalten; für instance ermöglicht das GIF-Format (Graphics Interchange Format) die Verwendung eines einzelnen Paletteneintrags als transparente Farbe. Für diesen Inhaltstyp gibt alphaThresholdPercent an, welcher Prozentsatz der Transparenz der transparenten Farbe zugeordnet werden soll. Da der Alphawert direkt proportional zur Deckkraft (nicht zur Transparenz) eines Pixels ist, gibt alphaThresholdPercent an, welcher Deckkraftgrad der vollständig transparenten Farbe zugeordnet ist.

Für instance bedeutet 9,8 %, dass jedes Pixel mit einem Alphawert von weniger als 25 der transparenten Farbe zugeordnet wird. Der Wert 100 % ordnet alle Pixel, die nicht vollständig undurchsichtig sind, der transparenten Farbe zu. Beachten Sie, dass die Palette eine transparente Farbe bereitstellen sollte. Wenn dies nicht der Fall ist, ist die Farbe "transparent" die am nächsten 0 (oft schwarz).

Beispiele

Im folgenden Beispiel wird ein Bildrahmen ohne Dithering- oder Alphaschwellenwert in ein 32bppPBGRA-Format konvertiert. Direct2D erfordert, dass Bitmapquellen das 32bppPBGRA-Format für das Rendern aufweisen. Ein vollständiges Beispiel zur Veranschaulichung der Verwendung von IWICFormatConverter finden Sie im WIC-Bildanzeigebeispiel mit 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);

Anforderungen

   
Unterstützte Mindestversion (Client) Windows XP mit SP2, Windows Vista [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile wincodec.h
Bibliothek Windowscodecs.lib
DLL Windowscodecs.dll