Sdílet prostřednictvím


Diskrétní přenosový efekt

Pomocí diskrétního přenosového efektu můžete namapovat intenzity barev obrázku pomocí funkce přenosu kroku vytvořené ze seznamu zadaných hodnot.

CLSID pro tento efekt je CLSID_D2D1DiscreteTransfer.

Příklad obrázku

Obrázek zde ukazuje vstup a výstup diskrétního přenosového efektu.

Před
obrázek před efektem.
Po
obrázek po transformaci.
ComPtr<ID2D1Effect> discreteTransferEffect;
m_d2dContext->CreateEffect(CLSID_D2D1DiscreteTransfer, &discreteTransferEffect);

discreteTransferEffect->SetInput(0, bitmap);

float table[3] = {0.0f, 0.5f, 1.0f};
discreteTransferEffect->SetValue(D2D1_DISCRETETRANSFER_PROP_RED_TABLE, table);
discreteTransferEffect->SetValue(D2D1_DISCRETETRANSFER_PROP_GREEN_TABLE, table);
discreteTransferEffect->SetValue(D2D1_DISCRETETRANSFER_PROP_BLUE_TABLE, table);

m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(discreteTransferEffect.Get());
m_d2dContext->EndDraw();

Přenosová funkce je založena na seznamu vstupů: V=(V0;V1;V2;V3;V? ,VN), kde N je počet prvků - 1.

Intenzita vstupních pixelů je reprezentována jako C. Intenzita výstupních pixelů se vypočítá pomocí rovnice:

Pro hodnotu C vyberte hodnotu k, která:

vzorec pro proces.

Výstup C lze vypočítat pomocí rovnice: C' = V?

Tento efekt funguje na rovných a předsledovaných alfa obrázcích. Efekt vypíše předem nastavené alfa rastrové obrázky.

Graf diskrétní funkce přenosu vypadá takto, pokud jsou vstupy [0.25, 0.5, 0.75, 1.0].

grafu intenzity pixelů pro diskrétní funkci přenosu.

Vlastnosti efektu

Poznámka

Hodnoty všech kanálů diskrétních vlastností přenosu jsou bez jednotkové a mají minimálně 0,0 a maximálně 1,0.

Zobrazovaný název a výčet indexu Typ a výchozí hodnota Popis
RedTable
D2D1_DISCRETETRANSFER_PROP_RED_TABLE
FLOAT[]
{0.0f, 1.0f}
Seznam hodnot použitých k definování funkce přenosu pro červený kanál.
RedDisable
D2D1_DISCRETETRANSFER_PROP_RED_DISABLE
BOOL
FALEŠNÝ
Pokud nastavíte hodnotu TRUE, efekt nepoužije funkci přenosu na červený kanál. Pokud nastavíte hodnotu NEPRAVDA, efekt použije funkci RedDiscreteTransfer na kanál Red.
GreenTable
D2D1_DISCRETETRANSFER_PROP_GREEN_TABLE
FLOAT[]
{0.0f, 1.0f}
Seznam hodnot, které definují funkci přenosu pro zelený kanál.
GreenDisable
D2D1_DISCRETETRANSFER_PROP_GREEN_DISABLE
BOOL
FALEŠNÝ
Pokud nastavíte hodnotu PRAVDA, efekt nepoužije funkci přenosu na zelený kanál. Pokud nastavíte hodnotu NEPRAVDA, efekt použije funkci GreenDiscreteTransfer na zelený kanál.
Modrá tabulka
D2D1_DISCRETETRANSFER_PROP_BLUE_TABLE
FLOAT[]
{0.0f, 1.0f}
Seznam hodnot, které definují funkci přenosu pro modrý kanál.
BlueDisable
D2D1_DISCRETETRANSFER_PROP_BLUE_DISABLE
BOOL
FALEŠNÝ
Pokud nastavíte hodnotu TRUE, efekt nepoužije funkci přenosu na modrý kanál. Pokud nastavíte hodnotu NEPRAVDA, efekt použije funkci BlueDiscreteTransfer na modrý kanál.
AlfaTable
D2D1_DISCRETETRANSFER_PROP_ALPHA_TABLE
FLOAT[]
{0.0f, 1.0f}
Seznam hodnot, které definují funkci přenosu pro kanál Alpha.
AlphaDisable
D2D1_DISCRETETRANSFER_PROP_ALPHA_DISABLE
BOOL
FALEŠNÝ
Pokud nastavíte hodnotu PRAVDA, efekt nepoužije funkci přenosu na kanál Alpha. Pokud nastavíte hodnotu NEPRAVDA, efekt použije funkci AlphaDiscreteTransfer na kanál Alpha.
ClampOutput
D2D1_DISCRETETRANSFER_PROP_CLAMP_OUTPUT
BOOL
FALEŠNÝ
Určuje, zda efekt upne hodnoty barev mezi 0 a 1 před tím, než efekt předá hodnoty dalšímu efektu v grafu. Efekt uchytí hodnoty před tím, než premultipluje alfa.
Pokud nastavíte hodnotu TRUE, efekt uchytne hodnoty. Pokud nastavíte hodnotu NEPRAVDA, efekt neuchytne hodnoty barev, ale jiné efekty a výstupní povrch mohou upnout hodnoty, pokud nejsou dostatečně vysoké přesnosti.

Požadavky

Požadavek Hodnota
Minimální podporovaný klient Windows 8 a Aktualizace platformy pro Windows 7 [desktopové aplikace | Aplikace pro Windows Store]
Minimální podporovaný server Windows 8 a Aktualizace platformy pro Windows 7 [desktopové aplikace | Aplikace pro Windows Store]
Záhlaví d2d1effects.h
Knihovna d2d1.lib, dxguid.lib

ID2D1Effect