Unterstützte Pixelformate und Alpha-Modi
In diesem Thema werden die Pixelformate und Alphamodi beschrieben, die von den verschiedenen Teilen von Direct2D unterstützt werden, einschließlich der einzelnen Renderzieltypen, id2D1Bitmapund ID2D1ImageSource. Der Abschnitt ist wie folgt gegliedert.
- Unterstützte YUV-Formate für DXGI-Bildquelle
- Angeben eines Pixelformats für ein Renderziel
- Unterstützte Formate für ID2D1HwndRenderTarget
- Unterstützte Formate für ID2D1DeviceContext
- Unterstützte Formate für kompatibles Renderziel
- Unterstützte Formate für DXGI Surface Render Target
- Unterstützte Formate für WIC-Bitmap-Renderziel
- Unterstützte Formate für ID2D1DCRenderTarget
- Angeben eines Pixelformats für eine ID2D1Bitmap
- Verwenden eines nicht unterstützten Formats
- Informationen zu Alphamodi
- Zugehörige Themen
Unterstützte YUV-Formate für DXGI-Bildquelle
Eine ID2D1ImageSource ist ein abstrahiertes Anbieter von Pixeln. Sie kann entweder über WIC (CreateImageSourceFromWic oder idXGISurface (CreateImageSourceFromDxgi) instanziiert werden.
ID2D1ImageSourceFromWic unterstützt die gleichen Pixelformate und Alphamodi wie ID2D1Bitmap.
Darüber hinaus unterstützt eine ID2D1ImageSource, die über IDXGISurface instanziiert wird, auch einige YUV-Pixelformate, einschließlich planarer Daten, die in mehrere Oberflächen aufgeteilt sind. Weitere Informationen zu den Anforderungen für jedes Pixelformat finden Sie unter CreateImageSourceFromDxgi.
| Format |
|---|
| _DXGI-FORMAT _ AYUV |
| _DXGI-FORMAT _ NV12 |
| _DXGI-FORMAT _ YUY2 |
| _DXGI-FORMAT _ P208 |
| DXGI _ FORMAT _ V208 |
| DXGI _ FORMAT _ V408 |
| DXGI _ FORMAT _ R8 _ UNORM |
| DXGI _ FORMAT _ R8G8 _ UNORM |
Angeben eines Pixelformats für ein Renderziel
Wenn Sie ein Renderziel erstellen, müssen Sie dessen Pixelformat angeben. Um das Pixelformat anzugeben, verwenden Sie eine D2D1 _ PIXEL _ FORMAT-Struktur, um den pixelFormat-Member einer D2D1 _ RENDER TARGET _ _ PROPERTIES-Struktur festzulegen. Anschließend übergeben Sie diese Struktur an die entsprechende Create-Methode, z.B. ID2D1Factory::CreateHwndRenderTarget.
Die D2D1 _ PIXEL _ FORMAT-Struktur verfügt über zwei Felder:
- format, ein DXGI _ FORMAT-Wert, der die Größe und Anordnung von Kanälen in jedem Pixel beschreibt, und
- alpha, ein D2D1 _ ALPHA _ MODE-Wert, der beschreibt, wie Alphainformationen interpretiert werden.
Im folgenden Beispiel wird eine D2D1 _ PIXEL _ FORMAT-Struktur erstellt und verwendet, um das Pixelformat und den Alphamodus einer ID2D1HwndRenderTargetanzugeben.
RECT rc;
GetClientRect(m_hwnd, &rc);
D2D1_SIZE_U size = D2D1::SizeU(
rc.right - rc.left,
rc.bottom - rc.top
);
// Create a pixel format and initial its format
// and alphaMode fields.
D2D1_PIXEL_FORMAT pixelFormat = D2D1::PixelFormat(
DXGI_FORMAT_B8G8R8A8_UNORM,
D2D1_ALPHA_MODE_IGNORE
);
D2D1_RENDER_TARGET_PROPERTIES props = D2D1::RenderTargetProperties();
props.pixelFormat = pixelFormat;
// Create a Direct2D render target.
hr = m_pD2DFactory->CreateHwndRenderTarget(
props,
D2D1::HwndRenderTargetProperties(m_hwnd, size),
&m_pRT
);
Unterschiedliche Renderziele unterstützen unterschiedliche Format- und Alphamoduskombinationen. In den folgenden Abschnitten werden die von den einzelnen Renderzielen unterstützten Format- und Alphakombinationen aufgeführt.
Unterstützte Formate für ID2D1HwndRenderTarget
Die unterstützten Formate für ein ID2D1HwndRenderTarget hängen davon ab, ob es mithilfe von Hardware oder Software gerendert wird oder ob Direct2D den Renderingmodus standardmäßig automatisch verarbeitet.
Hinweis
Es wird empfohlen, DXGI _ FORMAT _ B8G8R8A8 _ UNORM als Pixelformat zu verwenden, um eine bessere Leistung zu erzielen. Dies ist besonders hilfreich für Softwarerenderziele. BGRA-Formatziele sind besser als RGBA-Formate.
Wenn Sie eine ID2D1HwndRenderTargeterstellen, verwenden Sie die D2D1 _ RENDER TARGET _ _ PROPERTIES-Struktur, um Renderingoptionen anzugeben. Die Optionen enthalten das Pixelformat, wie im vorherigen Abschnitt erwähnt. Mit dem Typfeld dieser Struktur können Sie angeben, ob das Renderziel auf Hardware oder Software gerendert wird oder ob Direct2D den Renderingmodus automatisch bestimmen soll.
Um Direct2D zu aktivieren, um zu bestimmen, ob das Renderziel Hardware- oder Softwarerendering verwendet, verwenden Sie die Einstellung D2D1 _ RENDER TARGET TYPE _ _ _ DEFAULT.
In der folgenden Tabelle sind die unterstützten Formate für ID2D1HwndRenderTarget-Objekte aufgeführt, die mithilfe der Einstellung D2D1 _ RENDER TARGET TYPE _ _ _ DEFAULT erstellt werden.
| Format | Alphamodus |
|---|---|
| _DXGI-FORMAT _ B8G8R8A8 _ UNORM | D2D1 _ ALPHA _ MODE _ PREMULTIPLIED |
| _DXGI-FORMAT _ B8G8R8A8 _ UNORM | D2D1 _ ALPHA _ MODE _ IGNORE |
| _DXGI-FORMAT _ B8G8R8A8 _ UNORM | D2D1 _ ALPHA _ MODE _ UNKNOWN |
| _DXGI-FORMAT _ UNBEKANNT | D2D1 _ ALPHA _ MODE _ PREMULTIPLIED |
| _DXGI-FORMAT _ UNBEKANNT | D2D1 _ ALPHA _ MODE _ IGNORE |
| _DXGI-FORMAT _ UNBEKANNT | D2D1 _ ALPHA _ MODE _ UNKNOWN |
Um zu erzwingen, dass ein Renderziel Hardwarerendering verwendet, verwenden Sie die Hardwareeinstellung D2D1 _ RENDER TARGET TYPE _ _ _ HARDWARE. In der folgenden Tabelle sind die unterstützten Formate für ID2D1HwndRenderTarget-Objekte aufgeführt, die explizit Hardwarerendering verwenden.
| Format | Alphamodus |
|---|---|
| _DXGI-FORMAT _ B8G8R8A8 _ UNORM | D2D1 _ ALPHA _ MODE _ PREMULTIPLIED |
| _DXGI-FORMAT _ B8G8R8A8 _ UNORM | D2D1 _ ALPHA _ MODE _ IGNORE |
| _DXGI-FORMAT _ B8G8R8A8 _ UNORM | D2D1 _ ALPHA _ MODE _ UNKNOWN |
| DXGI _ FORMAT _ R8G8B8A8 _ UNORM | D2D1 _ ALPHA _ MODE _ PREMULTIPLIED |
| DXGI _ FORMAT _ R8G8B8A8 _ UNORM | D2D1 _ ALPHA _ MODE _ IGNORE |
| DXGI _ FORMAT _ R8G8B8A8 _ UNORM | D2D1 _ ALPHA _ MODE _ UNKNOWN |
| _DXGI-FORMAT _ UNBEKANNT | D2D1 _ ALPHA _ MODE _ PREMULTIPLIED |
| _DXGI-FORMAT _ UNBEKANNT | D2D1 _ ALPHA _ MODE _ IGNORE |
| _DXGI-FORMAT _ UNBEKANNT | D2D1 _ ALPHA _ MODE _ UNKNOWN |
Um zu erzwingen, dass ein Renderziel Softwarerendering verwendet, verwenden Sie die Einstellung D2D1 _ RENDER TARGET TYPE _ _ _ SOFTWARE. In der folgenden Tabelle sind die unterstützten Formate für ID2D1HwndRenderTarget-Objekte aufgeführt, die explizit Softwarerendering verwenden.
| Format | Alphamodus |
|---|---|
| _DXGI-FORMAT _ B8G8R8A8 _ UNORM | D2D1 _ ALPHA _ MODE _ PREMULTIPLIED |
| DXGI _ FORMAT _ B8G8R8A8 _ UNORM | D2D1 _ ALPHA _ MODE _ IGNORE |
| DXGI _ FORMAT _ B8G8R8A8 _ UNORM | D2D1 _ ALPHA _ MODE _ UNKNOWN |
| _DXGI-FORMAT _ UNBEKANNT | D2D1 _ ALPHA _ MODE _ PREMULTIPLIED |
| _DXGI-FORMAT _ UNBEKANNT | D2D1 _ ALPHA _ MODE _ IGNORE |
| _DXGI-FORMAT _ UNBEKANNT | D2D1 _ ALPHA _ MODE _ UNKNOWN |
Unabhängig davon, ob id2D1HwndRenderTarget hardwarebeschleunigt ist, verwendet das DXGI _ FORMAT _ UNKNOWN-Format standardmäßig DXGI _ FORMAT _ B8G8R8A8, und der D2D1 _ ALPHA MODE _ _ UNKNOWN Alpha-Modus verwendet standardmäßig D2D1 _ ALPHA MODE _ _ IGNORE.
Unterstützte Formate für ID2D1DeviceContext
Ab Windows 8 nutzt der Gerätekontext mehr direct3D-Formate mit hoher Farbe, z. B.:
- _DXGI-FORMAT _ B8G8R8A8 _ UNORM _ SRGB
- _DXGI-FORMAT _ R8G8B8A8 _ UNORM _ SRGB
- _DXGI-FORMAT _ R16G16B16A16 _ UNORM
- DXGI _ FORMAT _ R16G16B16A16 _ FLOAT
- DXGI _ FORMAT _ R32G32B32A32 _ FLOAT
Verwenden Sie die ID2D1DeviceContext::IsDxgiFormatSupported-Methode, um festzustellen, ob ein Format in einem bestimmten Gerätekontext funktioniert. Diese Formate können auch für eine ID2D1HwndRenderTargetfunktionieren.
Diese Formate werden zusätzlich zu den Formaten unterstützt, die von der ID2D1HwndRenderTarget-Schnittstelle in Windows 7 unterstützt werden. Weitere Informationen finden Sie unter Geräte und Gerätekontexte.
Unterstützte Formate für kompatibles Renderziel
Ein kompatibles Renderziel (ein ID2D1BitmapRenderTarget, das von einer der ID2D1RenderTarget::CreateCompatibleRenderTarget-Methoden erstellt wird) erbt die unterstützten Formate und Alphamodi des Renderziels, das es erstellt hat. Ein kompatibles Renderziel unterstützt auch die folgenden Format- und Alphamoduskombinationen, unabhängig davon, was das übergeordnete Element unterstützt.
| Format | Alphamodus |
|---|---|
| _DXGI-FORMAT _ A8 _ UNORM | D2D1 _ ALPHA _ MODE _ PREMULTIPLIED |
| _DXGI-FORMAT _ A8 _ UNORM | D2D1 _ ALPHA _ MODE _ STRAIGHT |
| _DXGI-FORMAT _ UNBEKANNT | D2D1 _ ALPHA _ MODE _ UNKNOWN |
Das DXGI _ FORMAT _ UNKNOWN-Format verwendet standardmäßig das übergeordnete Renderzielformat, und im Modus D2D1 ALPHA MODE _ _ _ UNKNOWN alpha wird standardmäßig D2D1 _ ALPHA MODE _ _ PREMULTIPLIED verwendet.
Unterstützte Formate für DXGI Surface Render Target
Ein DXGI-Renderziel ist ein ID2D1RenderTarget, das von einer der ID2D1Factory::CreateDxgiSurfaceRenderTarget-Methoden erstellt wird. Sie unterstützt die folgenden Format- und Alphamoduskombinationen.
| Format | Alphamodus |
|---|---|
| DXGI _ FORMAT _ B8G8R8A8 _ UNORM | D2D1 _ ALPHA _ MODE _ PREMULTIPLIED |
| DXGI _ FORMAT _ B8G8R8A8 _ UNORM | D2D1 _ ALPHA _ MODE _ IGNORE |
| DXGI _ FORMAT _ R8G8B8A8 _ UNORM | D2D1 _ ALPHA _ MODE _ PREMULTIPLIED |
| DXGI _ FORMAT _ R8G8B8A8 _ UNORM | D2D1 _ ALPHA _ MODE _ IGNORE |
| _DXGI-FORMAT _ A8 _ UNORM | D2D1 _ ALPHA _ MODE _ PREMULTIPLIED |
| _DXGI-FORMAT _ A8 _ UNORM | D2D1 _ ALPHA _ MODE _ STRAIGHT |
| _DXGI-FORMAT _ UNBEKANNT | D2D1 _ ALPHA _ MODE _ PREMULTIPLIED |
| _DXGI-FORMAT _ UNBEKANNT | D2D1 _ ALPHA _ MODE _ IGNORE |
Hinweis
Das Format muss mit dem Format der DXGI-Oberfläche übereinstimmen, auf die die DXGI-Oberfläche das Renderziel zeichnet.
Das DXGI _ FORMAT _ UNKNOWN-Format verwendet standardmäßig das DXGI-Oberflächenformat. Verwenden Sie nicht den Alphamodus D2D1 _ ALPHA MODE _ _ UNKNOWN mit einem DXGI-Oberflächenrenderziel. Er hat keinen Standardwert und führt dazu, dass die Erstellung des DXGI-Oberflächenrenderingziels fehlschlägt.
Unterstützte Formate für WIC-Bitmap-Renderziel
Ein WIC-Bitmaprenderziel ist ein ID2D1RenderTarget, das von einer der ID2D1Factory::CreateWicBitmapRenderTarget-Methoden erstellt wird. Sie unterstützt die folgenden Format- und Alphamoduskombinationen.
| Format | Alphamodus |
|---|---|
| DXGI _ FORMAT _ B8G8R8A8 _ UNORM | D2D1 _ ALPHA _ MODE _ PREMULTIPLIED |
| DXGI _ FORMAT _ B8G8R8A8 _ UNORM | D2D1 _ ALPHA _ MODE _ IGNORE |
| DXGI _ FORMAT _ B8G8R8A8 _ UNORM | D2D1 _ ALPHA _ MODE _ UNKNOWN |
| _DXGI-FORMAT _ A8 _ UNORM | D2D1 _ ALPHA _ MODE _ PREMULTIPLIED |
| _DXGI-FORMAT _ A8 _ UNORM | D2D1 _ ALPHA _ MODE _ STRAIGHT |
| _DXGI-FORMAT _ A8 _ UNORM | D2D1 _ ALPHA _ MODE _ UNKNOWN |
| _DXGI-FORMAT _ UNBEKANNT | D2D1 _ ALPHA _ MODE _ PREMULTIPLIED |
| _DXGI-FORMAT _ UNBEKANNT | D2D1 _ ALPHA _ MODE _ IGNORE |
| _DXGI-FORMAT _ UNBEKANNT | D2D1 _ ALPHA _ MODE _ UNKNOWN |
Das Pixelformat des WIC-Bitmapziels muss mit dem Pixelformat der WIC-Bitmap übereinstimmen.
Das FORMAT DXGI _ FORMAT _ UNKNOWN verwendet standardmäßig das WIC-Bitmapformat, und der Alphamodus D2D1 _ ALPHA MODE _ _ UNKNOWN alpha verwendet standardmäßig den WIC-Bitmap-Alphamodus.
Unterstützte Formate für ID2D1DCRenderTarget
Ein ID2D1DCRenderTarget unterstützt die folgenden Format- und Alphamoduskombinationen.
| Format | Alphamodus |
|---|---|
| DXGI _ FORMAT _ B8G8R8A8 _ UNORM | D2D1 _ ALPHA _ MODE _ PREMULTIPLIED |
| DXGI _ FORMAT _ B8G8R8A8 _ UNORM | D2D1 _ ALPHA _ MODE _ IGNORE |
Verwenden Sie nicht das FORMAT DXGI _ FORMAT _ UNKNOWN oder den Alphamodus D2D1 _ ALPHA MODE _ _ UNKNOWN mit einem ID2D1DCRenderTarget. Er hat keinen Standardwert und führt dazu, dass die ID2D1DCRenderTarget-Erstellung fehlschlägt.
Angeben eines Pixelformats für eine ID2D1Bitmap
Im Allgemeinen unterstützen ID2D1Bitmap-Objekte die folgenden Formate und Alphamodi (mit einigen Einschränkungen, die in den folgenden Absätzen beschrieben werden).
| Format | Alphamodus |
|---|---|
| DXGI _ FORMAT _ B8G8R8A8 _ UNORM | D2D1 _ _ ALPHA-MODUS _ VORMULTIPLIED |
| DXGI _ FORMAT _ B8G8R8A8 _ UNORM | D2D1 _ _ ALPHA-MODUS _ IGNORIEREN |
| DXGI _ FORMAT _ B8G8R8A8 _ UNORM | D2D1 _ _ ALPHAMODUS _ UNBEKANNT |
| DXGI _ FORMAT _ A8 _ UNORM | D2D1 _ _ ALPHA-MODUS _ VORMULTIPLIED |
| DXGI _ FORMAT _ A8 _ UNORM | D2D1 _ _ ALPHA-MODUS _ GERADE |
| DXGI _ FORMAT _ A8 _ UNORM | D2D1 _ _ ALPHAMODUS _ UNBEKANNT |
| DXGI _ FORMAT _ UNKNOWN | D2D1 _ _ ALPHA-MODUS _ VORMULTIPLIED |
| DXGI _ FORMAT _ UNKNOWN | D2D1 _ _ ALPHA-MODUS _ IGNORIEREN |
| DXGI _ FORMAT _ UNKNOWN | D2D1 _ _ ALPHAMODUS _ UNBEKANNT |
| DXGI _ FORMAT _ B8G8R8X8 _ UNORM (nur Windows 8.1 und höher) | D2D1 _ _ ALPHA-MODUS _ IGNORIEREN |
| DXGI _ FORMAT _ BC1 _ UNORM (nur Windows 8.1 und höher) | D2D1 _ _ ALPHA-MODUS _ VORMULTIPLIED |
| DXGI _ FORMAT _ BC1 _ UNORM (nur Windows 8.1 und höher) | D2D1 _ _ ALPHA-MODUS _ IGNORIEREN |
| DXGI _ FORMAT _ BC1 _ UNORM (nur Windows 8.1 und höher) | D2D1 _ _ ALPHAMODUS _ UNBEKANNT |
| DXGI _ FORMAT _ BC2 _ UNORM (nur Windows 8.1 und höher) | D2D1 _ _ ALPHA-MODUS _ VORMULTIPLIED |
| DXGI _ FORMAT _ BC2 _ UNORM (nur Windows 8.1 und höher) | D2D1 _ _ ALPHA-MODUS _ IGNORIEREN |
| DXGI _ FORMAT _ BC2 _ UNORM (nur Windows 8.1 und höher) | D2D1 _ _ ALPHAMODUS _ UNBEKANNT |
| DXGI _ FORMAT _ BC3 _ UNORM (nur Windows 8.1 und höher) | D2D1 _ _ ALPHA-MODUS _ VORMULTIPLIED |
| DXGI _ FORMAT _ BC3 _ UNORM (nur Windows 8.1 und höher) | D2D1 _ _ ALPHA-MODUS _ IGNORIEREN |
| DXGI _ FORMAT _ BC3 _ UNORM (nur Windows 8.1 und höher) | D2D1 _ _ ALPHAMODUS _ UNBEKANNT |
Wenn Sie die ID2D1RenderTarget::CreateSharedBitmap-Methode verwenden, verwenden Sie das Feld pixelFormat einer D2D1 _ BITMAP _ PROPERTIES-Struktur, um das Pixelformat des neuen Renderziels anzugeben. Er muss mit dem Pixelformat der ID2D1Bitmap-Quelle übereinstimmen.
Wenn Sie die CreateBitmapFromWicBitmap-Methode verwenden, verwenden Sie das PixelFormat-Feld einer D2D1 _ BITMAP _ PROPERTIES-Struktur (anstelle des pixelsFormat-Members einer D2D1 _ RENDER TARGET _ _ PROPERTIES-Struktur), um das Pixelformat des neuen Renderziels anzugeben. Er muss mit dem Pixelformat der WIC-Bitmapquelle übereinstimmen.
Hinweis
Weitere Informationen zur Unterstützung von blockkomprimierten Pixelformaten (BCn) finden Sie unter Blockkomprimierung.
Unterstützte WIC-Formate
Wenn Sie die CreateBitmapFromWicBitmap-Methode verwenden, um eine Bitmap aus einer WIC-Bitmap zu erstellen, oder wenn Sie die CreateSharedBitmap-Methode mit einem IWICBitmapLockverwenden, muss die WIC-Quelle in einem von Direct2D unterstützten Format vorliegen.
| WIC-Format | Entsprechendes DXGI-Format | Entsprechender Alphamodus |
|---|---|---|
| GUID _ WICPixelFormat8bppAlpha | DXGI _ FORMAT _ A8 _ UNORM | D2D1 _ ALPHA _ MODE _ STRAIGHT or D2D1 _ ALPHA _ MODE _ PREMULTIPLIED |
| GUID _ WICPixelFormat32bppPRGBA | DXGI _ FORMAT _ R8G8B8A8 _ UNORM | D2D1 _ ALPHA _ MODE _ PREMULTIPLIED or D2D1 _ ALPHA _ MODE _ IGNORE |
| GUID _ WICPixelFormat32bppBGR | DXGI _ FORMAT _ B8G8R8A8 _ UNORM | D2D1 _ _ ALPHA-MODUS _ IGNORIEREN |
| GUID _ WICPixelFormat32bppPBGRA | DXGI _ FORMAT _ B8G8R8A8 _ UNORM | D2D1 _ _ ALPHA-MODUS _ VORMULTIPLIED |
Ein Beispiel, das zeigt, wie eine WIC-Bitmap in ein unterstütztes Format konvertiert wird, finden Sie unter Laden einer Bitmap aus einer Datei.
Verwenden eines nicht unterstützten Formats
Die Verwendung einer beliebigen Kombination anderer Pixelformate und Alphamodi, die in den früheren Tabellen aufgeführt sind, führt zu einem D2DERR _ UNSUPPORTED _ PIXEL _ FORMAT- oder E _ INVALIDARG-Fehler.
Informationen zu Alphamodi
Informationen zu prämultipliierten und geraden Alphamodi
Die Enumeration D2D1 _ ALPHA _ MODE gibt an, ob der Alphakanal prämultipliiertes Alpha, gerades Alpha oder ignoriert und als nicht transparent betrachtet werden soll. Bei geradem Alpha gibt der Alphakanal einen Wert an, der der Transparentsicht einer Farbe entspricht.
Farben werden von Direct2D-Zeichnungsbefehlen und Pinseln immer als gerades Alpha behandelt, unabhängig vom Zielformat.
Bei prämultipliierten Alphas wird jeder Farbkanal nach dem Alphawert skaliert. In der Regel ist kein Farbkanalwert größer als der Alphakanalwert. Wenn ein Farbkanalwert in einem vorab multiplizierten Format größer als der Alphakanal ist, erstellt die Standardmäßig-Source-Over-Mischungs-Mathematik eine additive Mischung.
Der Wert des Alphakanals selbst ist sowohl im geraden als auch im vor multiplizierten Alpha identisch.
Unterschiede zwischen geradem und prämultipliiertem Alpha
Bei der Beschreibung einer RGBA-Farbe mithilfe von geradem Alpha wird der Alphawert der Farbe im Alphakanal gespeichert. Um beispielsweise eine rote Farbe zu beschreiben, die zu 60 % deckend ist, verwenden Sie die folgenden Werte: (255, 0, 0, 255 * 0,6) = (255, 0, 0, 153). Der Wert 255 steht für vollrot, und 153 (60 Prozent von 255) gibt an, dass die Farbe eine Deckkraft von 60 Prozent haben sollte.
Bei der Beschreibung einer RGBA-Farbe mithilfe von prämultipliziertem Alpha wird jede Farbe mit dem Alphawert multipliziert: (255 * 0,6, 0 * 0,6, 0 * 0,6, 255 * 0,6) = (153, 0, 0, 153).
Unabhängig vom Alphamodus des Renderziels werden D2D1 _ COLOR _ F-Werte immer als gerades Alpha interpretiert. Wenn Sie beispielsweise die Farbe eines ID2D1SolidColorBrush für die Verwendung mit einem Renderziel angeben, das den prämultipliierten Alphamodus verwendet, geben Sie die Farbe genau so an, als ob das Renderziel gerades Alpha verwenden würde. Wenn Sie mit dem Pinsel zeichnen, übersetzt Direct2D die Farbe für Sie in das Zielformat.
Alphamodus für Renderziele
Unabhängig von der Alphamoduseinstellung unterstützen die Inhalte eines Renderziels Transparenz. Wenn Sie beispielsweise ein teilweise transparentes rotes Rechteck mit einem Renderziel mit dem Alphamodus D2D1 _ ALPHA _ MODE _ IGNOREzeichnen, wird das Rechteck rosa angezeigt (wenn der Hintergrund weiß ist).
Wenn Sie ein teilweise transparentes rotes Rechteck zeichnen, wenn der Alphamodus D2D1 _ ALPHA _ MODE _ PREMULTIPLIEDist, wird das Rechteck rosa angezeigt (vorausgesetzt, der Hintergrund ist weiß), und Sie können es bis zu dem hinter dem Renderziel sehen. Dies ist nützlich, wenn Sie id2D1DCRenderTarget verwenden, um in einem transparenten Fenster zu rendern, oder wenn Sie ein kompatibles Renderziel (ein Renderziel, das von der CreateCompatibleRenderTarget-Methode erstellt wurde) verwenden, um eine Bitmap zu erstellen, die Transparenz unterstützt.
ClearType- und Alphamodi
Wenn Sie einen anderen Alphamodus als D2D1 _ ALPHA _ MODE _ IGNORE für ein Renderziel angeben, ändert sich der Text-Antialiasingmodus automatisch von D2D1 _ TEXT _ ANTIALIAS _ MODE CLEARTYPE in D2D1 _ TEXT _ ANTIALIAS _ MODE GRAYSCALE. (Wenn Sie den Alphamodus D2D1 _ ALPHA _ MODE _ UNKNOWN angeben, legt Direct2D das Alpha für Sie fest, abhängig von der Art des Renderziels.)
Sie können die SetTextAntialiasMode-Methode verwenden, um den Text antialias-Modus wieder in D2D1 _ TEXT _ ANTIALIAS _ MODE CLEARTYPEzu ändern. Das Rendern von ClearType-Text auf eine transparente Oberfläche kann jedoch zu unvorhersehbaren Ergebnissen führen. Wenn Sie ClearType-Text in einem transparenten Renderziel rendern möchten, empfiehlt es sich, eine der folgenden beiden Techniken zu verwenden.
- Verwenden Sie die PushAxisAlignedClip-Methode, um das Renderziel in den Bereich zu beschneiden, in dem der Text gerendert wird. Rufen Sie dann die Clear-Methode auf, geben Sie eine nicht transparente Farbe an, und rendern Sie dann den Text.
- Verwenden Sie DrawRectangle, um ein nicht transparentes Rechteck hinter dem Bereich zu zeichnen, in dem der Text gerendert wird.