Aracılığıyla paylaş


Ayrık aktarım etkisi

Sağladığınız değerler listesinden oluşturulan bir adım aktarım işlevini kullanarak görüntünün renk yoğunluklarını eşlemek için ayrı aktarım efektini kullanın.

Bu etki için CLSID CLSID_D2D1DiscreteTransfer.

Örnek resim

Buradaki görüntüde ayrık aktarım efektinin girişi ve çıkışı gösterilmektedir.

Önce
Efektin önüne görüntüyü .
Sonra
Dönüştürmeden sonra görüntüyü .
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();

Aktarım işlevi giriş listesini temel alır: V=(V0,V1,V2,V3,V? ,VN), burada N öğe sayısı - 1'dir.

Giriş piksel yoğunluğu C olarak gösterilir. Çıkış piksel yoğunluğu C denklemi ile hesaplanır:

C değeri için aşağıdaki gibi bir k değeri seçin:

İşlemin formülünü .

C çıkışı şu denklem kullanılarak hesaplanabilir: C' = V?

Bu etki düz ve önceden yüklenmiş alfa görüntülerinde çalışır. Efekt, önceden çoğaltılmış alfa bit eşlemleri oluşturur.

Girişler [0.25, 0.5, 0.75, 1.0]ise ayrık aktarım işlevinin grafiği şöyle görünür: .

Ayrık aktarım işlevi için piksel yoğunluğu grafiğini .

Efekt özellikleri

Not

Ayrık aktarım özelliklerinin tüm kanallarının değerleri birimsizdir ve en az 0,0 ve en fazla 1,0'a sahiptir.

Görünen ad ve dizin numaralandırması Tür ve varsayılan değer Açıklama
RedTable
D2D1_DISCRETETRANSFER_PROP_RED_TABLE
FLOAT[]
{0,0f, 1,0f}
Kırmızı kanal için aktarım işlevini tanımlamak için kullanılan değerlerin listesi.
RedDisable
D2D1_DISCRETETRANSFER_PROP_RED_DISABLE
BOOL
YANLIŞ
Bunu TRUE olarak ayarlarsanız, etki aktarım işlevini Kırmızı kanala uygulamaz. Bunu YANLIŞ olarak ayarlarsanız, etki RedDiscreteTransfer işlevini Red kanalına uygular.
GreenTable
D2D1_DISCRETETRANSFER_PROP_GREEN_TABLE
FLOAT[]
{0,0f, 1,0f}
Yeşil kanal için aktarım işlevini tanımlayan değerlerin listesi.
GreenDisable
D2D1_DISCRETETRANSFER_PROP_GREEN_DISABLE
BOOL
YANLIŞ
Bunu TRUE olarak ayarlarsanız, etki aktarım işlevini Yeşil kanala uygulamaz. Bunu YANLIŞ olarak ayarlarsanız, etki GreenDiscreteTransfer işlevini Yeşil kanala uygular.
BlueTable
D2D1_DISCRETETRANSFER_PROP_BLUE_TABLE
FLOAT[]
{0,0f, 1,0f}
Mavi kanal için aktarım işlevini tanımlayan değerlerin listesi.
BlueDisable
D2D1_DISCRETETRANSFER_PROP_BLUE_DISABLE
BOOL
YANLIŞ
Bunu TRUE olarak ayarlarsanız, etki aktarım işlevini Mavi kanala uygulamaz. Bunu YANLIŞ olarak ayarlarsanız, efekt BlueDiscreteTransfer işlevini Blue kanalına uygular.
AlphaTable
D2D1_DISCRETETRANSFER_PROP_ALPHA_TABLE
FLOAT[]
{0,0f, 1,0f}
Alfa kanalı için aktarım işlevini tanımlayan değerlerin listesi.
AlphaDisable
D2D1_DISCRETETRANSFER_PROP_ALPHA_DISABLE
BOOL
YANLIŞ
Bunu TRUE olarak ayarlarsanız, etki aktarım işlevini Alfa kanalına uygulamaz. Bunu YANLIŞ olarak ayarlarsanız, etki AlphaDiscreteTransfer işlevini Alfa kanalına uygular.
ClampOutput
D2D1_DISCRETETRANSFER_PROP_CLAMP_OUTPUT
BOOL
YANLIŞ
Efektin renk değerlerini efektten önce 0 ile 1 arasında bir değere sıkıştırıp bağlamadığı, değerleri grafikteki bir sonraki efekte geçirir. Etkisi, alfayı önceden yüklemeden önce değerleri sıkıştırıyor.
Bunu TRUE olarak ayarlarsanız, efekt değerleri sıkıştıracaktır. Bunu YANLIŞ olarak ayarlarsanız, efekt renk değerlerini sıkıştırmaz, ancak diğer efektler ve çıkış yüzeyi yeterince yüksek duyarlıkta değilse değerleri sıkıştırabilir.

Gereksinim -leri

Gereksinim Değer
Desteklenen en düşük istemci Windows 7 için Windows 8 ve Platform Güncelleştirmesi [masaüstü uygulamaları | Windows Mağazası uygulamaları]
Desteklenen en düşük sunucu Windows 7 için Windows 8 ve Platform Güncelleştirmesi [masaüstü uygulamaları | Windows Mağazası uygulamaları]
Üstbilgi d2d1effects.h
Kütüphane d2d1.lib, dxguid.lib

ID2D1Fefek