Freigeben über


JPEG YCbCr-Unterstützung

Ab Windows 8.1 unterstützt der Windows Imaging Component (WIC) JPEG-Codec das Lesen und Schreiben von Bilddaten in seinem systemeigenen YCbCr Formular. WIC YCbCr Unterstützung kann zusammen mit Direct2D- verwendet werden, um YCbCr Pixeldaten mit einem Bildeffekt zu rendern. Darüber hinaus kann der WIC JPEG-Codec YCbCr Pixeldaten nutzen, die von bestimmten Kameratreibern über Media Foundation erzeugt werden.

YCbCr Pixeldaten verbrauchen deutlich weniger Arbeitsspeicher als BGRA-Standardpixelformate. Darüber hinaus können Sie beim Zugriff auf YCbCr Daten einige Phasen der JPEG-Decodierungs-/Codierungspipeline auf Direct2D auslagern, die GPU beschleunigt wird. Durch die Verwendung von YCbCrkann Ihre App den JPEG-Speicherverbrauch und die Ladezeiten für die gleiche Größe und Qualität von Bildern reduzieren. Oder Ihre App kann jpeg-Bilder mit höherer Auflösung verwenden, ohne dass Leistungseinbußen auftreten.

In diesem Thema wird beschrieben, wie YCbCr Daten funktioniert und wie sie in WIC und Direct2D verwendet wird.

Informationen zu JPEG YCbCr Data

In diesem Abschnitt werden einige wichtige Konzepte erläutert, die erforderlich sind, um zu verstehen, wie YCbCr-Unterstützung in WIC funktioniert und seine wichtigsten Vorteile.

YCbCr Farbmodell

WIC in Windows 8 und früher unterstützt vier verschiedene Farbmodelle, die am häufigsten RGB/BGR sind. Dieses Farbmodell definiert Farbdaten mit roten, grünen und blauen Komponenten; Eine vierte Alphakomponente kann auch verwendet werden.

Hier ist ein Bild, das in seine roten, grünen und blauen Komponenten zersetzt ist.

ein Bild in seine roten, grünen und blauen Komponenten zersetzt.

YCbCr ist ein alternatives Farbmodell, das Farbdaten mithilfe einer Leuchtdichtekomponente (Y) und zwei Chrominanzkomponenten (Cb und Crdefiniert). Es wird häufig in Digital Imaging- und Videoszenarien verwendet. Der Begriff YCbCr wird häufig austauschbar mit YUV verwendet, obwohl die beiden technisch unterschiedlich sind.

Es gibt mehrere Variationen von YCbCr, die sich in Farbraum- und Dynamischen Bereichsdefinitionen unterscheiden – WIC unterstützt speziell JPEG JFIF YCbCr Daten. Weitere Informationen finden Sie in der JPEG ITU-T81 Spezifikation.

Hier ist ein Bild, das in seine Y-, C-b-- und C-r--Komponenten zersetzt ist.

ein Bild in seine y-, cb- und cr-Komponenten zersetzt.

Planar im Vergleich zu interleavierten Speicherlayouts

In diesem Abschnitt werden einige Unterschiede zwischen dem Zugriff auf und dem Speichern von RGB-Pixeldaten im Arbeitsspeicher im Vergleich zu YCbCr Daten beschrieben.

RGB-Pixeldaten werden in der Regel mithilfe eines gespeicherten Speicherlayouts gespeichert. Dies bedeutet, dass Daten für eine einzelne Farbkomponente zwischen Pixeln interleaviert werden und jedes Pixel fortlaufend im Arbeitsspeicher gespeichert wird.

Dies ist eine Abbildung, in der RGBA-Pixeldaten dargestellt werden, die in einem gespeicherten Speicherlayout gespeichert sind.

eine Abbildung, in der rgba-Pixeldaten angezeigt werden, die in einem gespeicherten Speicherlayout gespeichert sind.

YCbCr Daten werden in der Regel mithilfe eines planaren Speicherlayouts gespeichert. Dies bedeutet, dass jede Farbkomponente separat in einer eigenen zusammenhängenden Ebene für insgesamt drei Ebenen gespeichert wird. In einer anderen gemeinsamen Konfiguration werden die Komponenten Cb und Cr miteinander verflochten und gespeichert, während die Y-Komponente in einer eigenen Ebene verbleibt, für insgesamt zwei Ebenen.

Hier ist eine Abbildung mit planaren Y- und interleavierten C-bCr Pixeldaten, einem allgemeinen YC-bCr Speicherlayout.

eine Abbildung mit planaren y- und interleavierten CBCR-Pixeldaten, einem allgemeinen ycbcr-Speicherlayout.

In WIC und Direct2D wird jede Farbebene als eigenes Objekt behandelt (entweder ein IWICBitmapSource- oder ID2D1Bitmap-), und zusammen bilden diese Ebenen die Sicherungsdaten für ein YC-bCr Bild.

WiC unterstützt zwar den Zugriff auf YCbCr Daten in den Konfigurationen 2 und 3 Ebenen, Direct2D unterstützt jedoch nur den früheren (Y und CbCr). Daher sollten Sie bei der gemeinsamen Verwendung von WIC und Direct2D immer die 2 Ebene YCbCr Konfiguration verwenden.

Chroma-Subsampling

Das YCbCr Farbmodell eignet sich gut für digitale Bilderstellungsszenarien, da es bestimmte Aspekte des menschlichen visuellen Systems nutzen kann. Insbesondere sind Menschen empfindlicher gegenüber Veränderungen der Leuchtdichte (Helligkeit) eines Bilds und weniger empfindlich auf die Chrominanz (Farbe). Durch das Aufteilen der Farbdaten in separate Leuchtdichte- und Chrominanzkomponenten können wir selektiv nur die Chrominanzkomponenten komprimieren, um Platzeinsparungen mit minimalem Qualitätsverlust zu erzielen.

Eine Technik dafür wird als Chroma-Subsampling bezeichnet.One technique for doing this is called chroma subsampling. Die Ebenen Cb und Cr werden in einer oder beiden horizontalen und vertikalen Abmessungen unterstempelt (herabskaliert). Aus historischen Gründen wird jeder Farbuntersamplingmodus häufig mit einem dreiteiligen J:a:b-Verhältnis bezeichnet.

Untersamplingmodus Horizontale Abwärtsskalen Vertikale Abwärtsskalen Bits pro Pixel*
4:4:4 1x 1x 24
4:2:2 2x 1x 16
4:4:0 1x 2x 16
4:2:0 2x 2x 12

 

* Enthält Y-Daten.

Wenn Sie aus der obigen Tabelle YCbCr verwenden, um nicht komprimierte Bilddaten zu speichern, können Sie eine Speichereinsparung von 25% bis 62,5% und 32 Bit pro Pixel RGBA-Daten erzielen, je nachdem, welche Farbuntersamplingmodus verwendet wird.

JPEG-Verwendung von YCbCr

Auf hoher Ebene besteht die JPEG-Dekomprimierungspipeline aus den folgenden Phasen:

  1. Durchführen von Entropie (z. B. Huffman)-Dekomprimierung
  2. Durchführen einer Dequantisierung
  3. Durchführen umgekehrter diskreter Kosinustransformation
  4. Durchführen von Chroma-Upsampling auf CbCr Daten
  5. Konvertieren von YCbCr Daten in RGBA (falls erforderlich)

Wenn der JPEG-Codec YCbCr Daten erzeugt, können wir die letzten beiden Schritte des Decodierungsprozesses vermeiden oder auf die GPU zurückstellen. Zusätzlich zu den im vorherigen Abschnitt aufgeführten Speichereinsparungen reduziert dies die Gesamtzeit, die zum Decodieren des Bilds erforderlich ist. Die gleichen Einsparungen gelten beim Codieren von YCbCr Daten.

Verwenden von JPEG YCbCr Data

In diesem Abschnitt wird erläutert, wie SIE WIC und Direct2D verwenden, um mit YCbCr Daten zu arbeiten.

Die Anleitungen aus diesem Dokument, die in der Praxis verwendet werden, finden Sie in den JPEG YCbCr-Optimierungen in Direct2D- und WIC-Beispiel die alle Schritte veranschaulicht, die zum Decodieren und Rendern von YCbCr Inhalt in einer Direct2D-App erforderlich sind.

Verwenden von YCbCr JPEG-Bildern

Die meisten JPEG-Bilder werden als YCbCrgespeichert. Einige JPEGs enthalten CMYK- oder Graustufendaten und verwenden YCbCrnicht. Dies bedeutet, dass Sie in der Regel, aber nicht immer, vorhandene JPEG-Inhalte ohne Änderungen direkt verwenden können.

WIC und Direct2D unterstützen nicht alle möglichen YCbCr Konfiguration, und YCbCr Unterstützung in Direct2D hängt von der zugrunde liegenden Grafikhardware und dem Treiber ab. Aus diesem Grund muss eine allgemeine Imageerstellungspipeline robust für Bilder sein, die YCbCr (einschließlich anderer gängiger Bildformate wie PNG oder BMP) nicht verwenden, oder in Fällen, in denen YCbCr Unterstützung nicht verfügbar ist. Wir empfehlen, Ihre vorhandene BGRA-basierte Imageerstellungspipeline beizubehalten und YCbCr als Leistungsoptimierung zu aktivieren.

Windows Imaging Component APIs

WIC in Windows 8.1 fügt drei neue Schnittstellen hinzu, um den Zugriff auf JPEG YCbCr Daten zu ermöglichen.

IWICPlanarBitmapSourceTransform

IWICPlanarBitmapSourceTransform ist analog zu IWICBitmapSourceTransform, es sei denn, es erzeugt Pixel in einer planaren Konfiguration, einschließlich YCbCr Daten. Sie können diese Schnittstelle abrufen, indem Sie QueryInterface für eine Implementierung von IWICBitmapSource- aufrufen, die den planaren Zugriff unterstützt. Dazu gehören die Implementierung von IWICBitmapFrameDecode sowie IWICBitmapScaler, IWICBitmapFlipRotatorund IWICColorTransform.

IWICPlanarBitmapFrameEncode

IWICPlanarBitmapFrameEncode bietet die Möglichkeit, planare Pixeldaten zu codieren, einschließlich YCbCr Daten. Sie können diese Schnittstelle abrufen, indem Sie QueryInterface für die Implementierung von IWICBitmapFrameEncodedes JPEG-Codecs aufrufen.

IWICPlanarFormatConverter

IWICPlanarFormatConverter ermöglicht IWICFormatConverter- planare Pixeldaten zu nutzen, einschließlich YCbCrund konvertieren sie in ein überlappende Pixelformat. Es macht nicht die Möglichkeit verfügbar, interleavierte Pixeldaten in ein planares Format zu konvertieren. Sie können diese Schnittstelle abrufen, indem Sie QueryInterface für die von Windows bereitgestellte Implementierung von IWICFormatConverteraufrufen.

Direct2D-APIs

Direct2D in Windows 8.1 unterstützt YCbCr planaren Pixeldaten mit den neuen YCbCr Bildeffekt. Dieser Effekt bietet die Möglichkeit, YCbCr Daten zu rendern. Der Effekt wird als Eingabe von zwei ID2D1Bitmap Schnittstellen verwendet: eines mit planaren Y-Daten im DXGI_FORMAT_R8_UNORM-Format und einer mit interleavierten CbCr-Daten im DXGI_FORMAT_R8G8_UNORM Format. In der Regel verwenden Sie diesen Effekt anstelle der ID2D1Bitmap-, die BGRA-Pixeldaten enthalten hätte.

Der YCbCr Bildeffekt soll in Verbindung mit den WIC YCbCr APIs verwendet werden, die die YCbCr Daten bereitstellen. Dies wirkt effektiv darauf ab, einige der Decodierungsarbeit von der CPU auf die GPU zu entladen, wo sie viel schneller und parallel verarbeitet werden kann.

Ermitteln, ob die YC-bCr-Konfiguration unterstützt wird

Wie bereits erwähnt, sollte Ihre App robust für Fälle sein, in denen die Unterstützung von YCbCr nicht verfügbar ist. In diesem Abschnitt werden die Bedingungen erläutert, auf die Ihre App überprüfen sollte. Wenn eine der folgenden Prüfungen fehlschlägt, sollte Ihre App auf eine BGRA-basierte Standardpipeline zurückgreifen.

Unterstützt die WIC-Komponente YCbCr Datenzugriff?

Nur der von Windows bereitgestellte JPEG-Codec und bestimmte WIC-Transformationen unterstützen YCbCr Datenzugriff. Eine vollständige Liste finden Sie im Abschnitt Windows Imaging Component APIs.

Rufen Sie QueryInterface auf der ursprünglichen Schnittstelle auf, um eine der planaren YCbCr Schnittstellen abzurufen. Dies schlägt fehl, wenn die Komponente YCbCr Datenzugriff nicht unterstützt.

Wird die angeforderte WIC-Transformation für YCbCrunterstützt?

Nach dem Abrufen eines IWICPlanarBitmapSourceTransform-sollten Sie zuerst DoesSupportTransform-aufrufen. Diese Methode verwendet als Eingabeparameter den vollständigen Satz von Transformationen, die Sie auf die planare YC-bCr Daten anwenden möchten, und gibt einen booleschen Wert zurück, der die Unterstützung angibt, sowie die nächstgelegenen Dimensionen der angeforderten Größe, die zurückgegeben werden kann. Sie sollten alle drei Werte überprüfen, bevor Sie mit IWICPlanarBitmapSourceTransform::CopyPixelsauf die Pixeldaten zugreifen.

Dieses Muster ähnelt der Verwendung IWICBitmapSourceTransform-.

Unterstützt der Grafiktreiber die für die Verwendung von YCbCr mit Direct2D erforderlichen Features?

Diese Überprüfung ist nur erforderlich, wenn Sie den Direct2D YCbCr Effekt verwenden, um YCbCr Inhalt zu rendern. Direct2D speichert YCbCr Daten mithilfe der DXGI_FORMAT_R8_UNORM- und DXGI_FORMAT_R8G8_UNORM Pixelformate, die nicht von allen Grafiktreibern verfügbar sind.

Bevor Sie den YC-bCr Bildeffekt verwenden, sollten Sie ID2D1DeviceContext::IsDxgiFormatSupported aufrufen, um sicherzustellen, dass beide Formate vom Treiber unterstützt werden.

Beispielcode

Nachfolgend finden Sie ein Codebeispiel, in dem die empfohlenen Prüfungen veranschaulicht werden. Dieses Beispiel wurde aus den JPEG YCbCr Optimierungen in Direct2D- und WIC-Beispielentnommen.

bool DirectXSampleRenderer::DoesWicSupportRequestedYCbCr()
{
    ComPtr<IWICPlanarBitmapSourceTransform> wicPlanarSource;
    HRESULT hr = m_wicScaler.As(&wicPlanarSource);
    if (SUCCEEDED(hr))
    {
        BOOL isTransformSupported;
        uint32 supportedWidth = m_cachedBitmapPixelWidth;
        uint32 supportedHeight = m_cachedBitmapPixelHeight;
        DX::ThrowIfFailed(
            wicPlanarSource->DoesSupportTransform(
                &supportedWidth,
                &supportedHeight,
                WICBitmapTransformRotate0,
                WICPlanarOptionsDefault,
                SampleConstants::WicYCbCrFormats,
                m_planeDescriptions,
                SampleConstants::NumPlanes,
                &isTransformSupported
                )
            );

        // The returned width and height may be larger if IWICPlanarBitmapSourceTransform does not
        // exactly support what is requested.
        if ((isTransformSupported == TRUE) &&
            (supportedWidth == m_cachedBitmapPixelWidth) &&
            (supportedHeight == m_cachedBitmapPixelHeight))
        {
            return true;
        }
    }

    return false;
}

bool DirectXSampleRenderer::DoesDriverSupportYCbCr()
{
    auto d2dContext = m_deviceResources->GetD2DDeviceContext();

    return (d2dContext->IsDxgiFormatSupported(DXGI_FORMAT_R8_UNORM)) &&
        (d2dContext->IsDxgiFormatSupported(DXGI_FORMAT_R8G8_UNORM));
}

Decodierung von YCbCr Pixeldaten

Wenn Sie YCbCr Pixeldaten abrufen möchten, sollten Sie IWICPlanarBitmapSourceTransform::CopyPixelsaufrufen. Diese Methode kopiert Pixeldaten in ein Array gefüllter WICBitmapPlane- Strukturen, eine für jede gewünschte Datenebene (z. B. Y und CbCr). Ein WICBitmapPlane- enthält Informationen zu den Pixeldaten und verweist auf den Speicherpuffer, der die Daten empfängt.

Wenn Sie die YCbCr Pixeldaten mit anderen WIC-APIs verwenden möchten, sollten Sie eine entsprechend konfigurierte IWICBitmap-erstellen, rufen Sie Lock auf, um den zugrunde liegenden Speicherpuffer abzurufen. und ordnen Sie den Puffer dem WICBitmapPlane zu, mit dem die YC-bCr Pixeldaten empfangen werden. Anschließend können Sie die IWICBitmap normal verwenden.

Wenn Sie schließlich die YC-bCr Daten in Direct2D rendern möchten, sollten Sie eine ID2D1Bitmap- aus jedem IWICBitmap- erstellen und als Quelle für den YCbCr Bildeffekt verwenden. MIT WIC können Sie mehrere Planarkonfigurationen anfordern. Bei der Interoperabilität mit Direct2D sollten Sie zwei Ebenen anfordern, eine mit GUID_WICPixelFormat8bppY und die andere mit GUID_WICPixelFormat16bppCbCr, da dies die von Direct2D erwartete Konfiguration ist.

Codebeispiel

Nachfolgend finden Sie ein Codebeispiel, in dem die Schritte zum Decodieren und Rendern von YC-bC-r--Daten in Direct2D veranschaulicht werden. Dieses Beispiel wurde aus den JPEG YCbCr Optimierungen in Direct2D- und WIC-Beispielentnommen.

void DirectXSampleRenderer::CreateYCbCrDeviceResources()
{
    auto wicFactory = m_deviceResources->GetWicImagingFactory();
    auto d2dContext = m_deviceResources->GetD2DDeviceContext();

    ComPtr<IWICPlanarBitmapSourceTransform> wicPlanarSource;
    DX::ThrowIfFailed(
        m_wicScaler.As(&wicPlanarSource)
        );

    ComPtr<IWICBitmap> bitmaps[SampleConstants::NumPlanes];
    ComPtr<IWICBitmapLock> locks[SampleConstants::NumPlanes];
    WICBitmapPlane planes[SampleConstants::NumPlanes];

    for (uint32 i = 0; i < SampleConstants::NumPlanes; i++)
    {
        DX::ThrowIfFailed(
            wicFactory->CreateBitmap(
                m_planeDescriptions[i].Width,
                m_planeDescriptions[i].Height,
                m_planeDescriptions[i].Format,
                WICBitmapCacheOnLoad,
                &bitmaps[i]
                )
            );

        LockBitmap(bitmaps[i].Get(), WICBitmapLockWrite, nullptr, &locks[i], &planes[i]);
    }

    DX::ThrowIfFailed(
        wicPlanarSource->CopyPixels(
            nullptr, // Copy the entire source region.
            m_cachedBitmapPixelWidth,
            m_cachedBitmapPixelHeight,
            WICBitmapTransformRotate0,
            WICPlanarOptionsDefault,
            planes,
            SampleConstants::NumPlanes
            )
        );

    DX::ThrowIfFailed(d2dContext->CreateEffect(CLSID_D2D1YCbCr, &m_d2dYCbCrEffect));

    ComPtr<ID2D1Bitmap1> d2dBitmaps[SampleConstants::NumPlanes];
    for (uint32 i = 0; i < SampleConstants::NumPlanes; i++)
    {
        // IWICBitmapLock must be released before using the IWICBitmap.
        locks[i] = nullptr;

        // First ID2D1Bitmap1 is DXGI_FORMAT_R8 (Y), second is DXGI_FORMAT_R8G8 (CbCr).
        DX::ThrowIfFailed(d2dContext->CreateBitmapFromWicBitmap(bitmaps[i].Get(), &d2dBitmaps[i]));
        m_d2dYCbCrEffect->SetInput(i, d2dBitmaps[i].Get());
    }
}

void DirectXSampleRenderer::LockBitmap(
    _In_ IWICBitmap *pBitmap,
    DWORD bitmapLockFlags,
    _In_opt_ const WICRect *prcSource,
    _Outptr_ IWICBitmapLock **ppBitmapLock,
    _Out_ WICBitmapPlane *pPlane
    )
{
    // ComPtr guarantees the IWICBitmapLock is released if an exception is thrown.
    ComPtr<IWICBitmapLock> lock;
    DX::ThrowIfFailed(pBitmap->Lock(prcSource, bitmapLockFlags, &lock));
    DX::ThrowIfFailed(lock->GetStride(&pPlane->cbStride));
    DX::ThrowIfFailed(lock->GetDataPointer(&pPlane->cbBufferSize, &pPlane->pbBuffer));
    DX::ThrowIfFailed(lock->GetPixelFormat(&pPlane->Format));
    *ppBitmapLock = lock.Detach();
}

Transformieren von YCbCr Pixeldaten

Das Transformieren von YCbCr Daten ist nahezu identisch mit der Decodierung, da beide IWICPlanarBitmapSourceTransform. Der einzige Unterschied besteht darin, aus welchem WIC-Objekt Sie die Schnittstelle abgerufen haben. Die von Windows bereitgestellte Skalierungs-, Flip-Rotator- und Farbtransformation unterstützen YCbCr Zugriff.

Verketten von Transformationen

WIC unterstützt das Verketten mehrerer Transformationen. Sie können beispielsweise die folgende WIC-Pipeline erstellen:

ein Diagramm einer WIC-Pipeline ab einem JPEG-Decoder.

Anschließend können Sie QueryInterface für die IWICColorTransform- aufrufen, um IWICPlanarBitmapSourceTransformabzurufen. Die Farbtransformation kann mit den vorherigen Transformationen kommunizieren und die Aggregatfunktionen jeder Phase in der Pipeline verfügbar machen. WIC stellt sicher, dass die YCbCr Daten über den gesamten Prozess erhalten bleiben. Diese Verkettung funktioniert nur bei Der Verwendung von Komponenten, die YCbCr Zugriff unterstützen.

JPEG Codec-Optimierungen

Ähnlich wie die JPEG-Framedecodierungsimplementierung von IWICBitmapSourceTransformunterstützt die JPEG-Framedecodierungsimplementierung von IWICPlanarBitmapSourceTransform native JPEG DCT Domain Scaling und Rotation. Sie können eine Leistung von zwei Abwärtsskalen oder eine Drehung direkt vom JPEG-Decoder anfordern. Dies führt in der Regel zu einer höheren Qualität und Leistung als die Verwendung der diskreten Transformationen.

Wenn Sie eine oder mehrere WIC-Transformationen nach dem JPEG-Decoder verketten, kann sie die native JPEG-Skalierung und -Drehung nutzen, um den angeforderten Aggregatvorgang zu erfüllen.

Formatkonvertierungen

Verwenden Sie IWICPlanarFormatConverter-, um planare YCbCr Pixeldaten in ein interleaviertes Pixelformat wie GUID_WICPixelFormat32bppPBGRA zu konvertieren. WIC in Windows 8.1 bietet nicht die Möglichkeit, in ein planares YCbCr Pixelformat zu konvertieren.

Codieren von YCbCr Pixeldaten

Verwenden Sie IWICPlanarBitmapFrameEncode- zum Codieren von YCbCr Pixeldaten an den JPEG-Encoder. Die Codierung von YCbCr Daten IWICPlanarBitmapFrameEncode ist ähnlich, aber nicht identisch mit der Codierung von interleavierten Daten mithilfe IWICBitmapFrameEncode. Die planare Schnittstelle macht nur die Möglichkeit verfügbar, Planarframe-Bilddaten zu schreiben, und Sie sollten weiterhin die Framecodierungsschnittstelle verwenden, um Metadaten oder eine Miniaturansicht festzulegen und am Ende des Vorgangs zu übernehmen.

Für den typischen Fall sollten Sie die folgenden Schritte ausführen:

  1. Rufen Sie die IWICBitmapFrameEncode normal ab. Wenn Sie die Farbuntersampling konfigurieren möchten, legen Sie beim Erstellen des Frames die option JpegYCrCbSubsampling Encoder fest.
  2. Wenn Sie Metadaten oder eine Miniaturansicht festlegen müssen, verwenden Sie dazu IWICBitmapFrameEncode normal.
  3. QueryInterface für die IWICPlanarBitmapFrameEncode.
  4. Legen Sie die YC-bCr Pixeldaten mithilfe IWICPlanarBitmapFrameEncode::WriteSource oder IWICPlanarBitmapFrameEncode::WritePixelsfest. Im Gegensatz zu ihren IWICBitmapFrameEncode Gegenstücken stellen Sie diese Methoden mit einem Array von IWICBitmapSource oder WICBitmapPlane bereit, die die YCbCr Pixelebenen enthalten.
  5. Wenn Sie fertig sind, rufen Sie IWICBitmapFrameEncode::Commitauf.

Decodieren von YCbCr Pixeldaten in Windows 10

Ab Windows 10 Build 1507 stellt Direct2D ID2D1ImageSourceFromWicbereit, eine einfachere Möglichkeit, JPEGs in Direct2D zu decodieren und dabei YCbCr Optimierungen zu nutzen. ID2D1ImageSourceFromWic führt automatisch alle erforderlichen YCbCr Funktionsprüfungen für Sie durch; sie verwendet nach Möglichkeit den optimierten Codepath und verwendet andernfalls einen Fallback. Außerdem werden neue Optimierungen ermöglicht, z. B. nur Zwischenspeicherungsunterbereiche des Bilds, die jeweils benötigt werden.

Weitere Informationen zur Verwendung von ID2D1ImageSourceFromWicfinden Sie im Direct2D Photo Adjustment SDK Beispiel.