Konvolve matris efekti

Bir görüntüye rastgele 2B çekirdek uygulamak için karmaşık matris efektini kullanın. Bu efekti kullanarak bir görüntüyü bulanıklaştırabilir, kenarları algılayabilir, kabarabilir veya netleştirebilirsiniz.

Bu etki için CLSID CLSID_D2D1ConvolveMatrix.

Örnek resim

Buradaki örnekte, 3 x 3 çekirdek içeren konvolve matris 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> convolveMatrixEffect;
m_d2dContext->CreateEffect(CLSID_D2D1ConvolveMatrix, &convolveMatrixEffect);

convolveMatrixEffect->SetInput(0, bitmap);
float matrix[9] = {-1, -1, -1, -1, 9, -1, -1, -1, -1};
convolveMatrixEffect->SetValue(D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX, matrix);

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

Efekt özellikleri

Görünen ad ve dizin numaralandırması Açıklama
KernelUnitLength
D2D1_CONVOLVEMATRIX_PROP_KERNEL_UNIT_LENGTH
Çekirdekteki bir birimin boyutu. Birimler (DIPs/çekirdek birimi) içindedir; burada çekirdek birimi, convolution çekirdeğindeki öğenin boyutudur. 1 (DIP/çekirdek birimi) değeri, 96 DPI'daki bir görüntüdeki bir piksele karşılık gelir.
Tür FLOAT'dır.
Varsayılan değer 1,0f'dir.
ScaleMode
D2D1_CONVOLVEMATRIX_PROP_SCALE_MODE
Efektin görüntüyü ilgili çekirdek birimi uzunluğuna ölçeklendirmek için kullandığı ilişkilendirme modu. Kalite ve hız olarak değişen altı ölçek modu vardır.
Türü D2D1_CONVOLVEMATRIX_SCALE_MODE.
Varsayılan değer D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR.
KernelSizeX
D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_X
Çekirdek matrisinin genişliği. Birimler çekirdek birimlerinde belirtilir. Türü UINT32'dir.
Varsayılan değer 3'dür.
KernelSizey
D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_Y
Çekirdek matrisinin yüksekliği. Birimler çekirdek birimlerinde belirtilir. Türü UINT32'dir.
Varsayılan değer 3'dür.
KernelMatrix
D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX
Görüntüye uygulanacak çekirdek matrisi. Çekirdek öğeleri sınırlanmamıştır ve float olarak belirtilir.
FLOAT[] içindeki ilk KernelSizeX sayısı, çekirdekteki ilk satıra karşılık gelir. İkinci KernelSizeX numarası kümesi ikinci satıra karşılık gelir ve en çok KernelSizeY satırlarına karşılık gelir.
Tür FLOAT[] şeklindedir.
Varsayılan değer{0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f} şeklindedir.
Bölen
D2D1_CONVOLVEMATRIX_PROP_DIVISOR
Çekirdek matrisi bir piksele uygulanır ve sonuç bu değere bölünür.
0, float epsilon değeri olarak davranır.
Tür FLOAT'dır.
Varsayılan değer 1,0f'dir.
Önyargı
D2D1_CONVOLVEMATRIX_PROP_BIAS
Bu etki çekirdek matrisini, böleni uygular ve ardından sonuda yanlılık eklenir. Yanlılık sınırsız ve birimsizdir. Tür FLOAT'dır.
Varsayılan değer 0,0f'dir.
KernelOffset
D2D1_CONVOLVEMATRIX_PROP_KERNEL_OFFSET
Konvolüsyon çekirdeğini çıkış pikselinde ortalanmış bir konumdan, sol/sağ ve yukarı/aşağı olarak belirttiğiniz bir konuma kaydırır. Uzaklık çekirdek birimlerinde tanımlanır.
Bazı uzaklıklar ve çekirdek boyutlarıyla, convolution çekirdeğinin örnekleri piksel görüntü merkezine gelmez. Çekirdek örneğinin piksel değerleri bilinear ilişkilendirme ile hesaplanır.
Türü D2D1_VECTOR_2F.
Varsayılan değer: {0.0f, 0.0f}.
PreserveAlpha
D2D1_CONVOLVEMATRIX_PROP_PRESERVE_ALPHA
Convolution çekirdeğinin alfa kanalına mı yoksa yalnızca renk kanallarına mı uygulanacağını belirtir.
Bunu TRUE olarak ayarlarsanız convolution çekirdeği yalnızca renk kanallarına uygulanır.
Bunu FALSE olarak ayarlarsanız tüm kanallara konvolüsyon çekirdeği uygulanır.
Türü BOOL'dir.
Varsayılan değer YANLIŞ'tır.
BorderMode
D2D1_CONVOLVEMATRIX_PROP_BORDER_MODE
Görüntünün kenarını yumuşak veya sert olarak hesaplamak için kullanılan mod. Daha fazla bilgi için bkz. Kenarlık modları.
Türü D2D1_BORDER_MODE.
Varsayılan değer D2D1_BORDER_MODE_SOFT.
ClampOutput
D2D1_CONVOLVEMATRIX_PROP_CLAMP_OUTPUT
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.
Türü BOOL'dir.
Varsayılan değer YANLIŞ'tır.

Ölçek modları

Sayım Açıklama
D2D1_CONVOLVEMATRIX_SCALE_MODE_NEAREST_NEIGHBOR En yakın tek noktayı örnekler ve bunu kullanır. Bu mod daha az işlem süresi kullanır, ancak en düşük kaliteli görüntüyü görüntüler.
D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR Dört noktalı örnek ve doğrusal ilişkilendirme kullanır. Bu mod, en yakın komşu moduna göre daha yüksek kaliteli bir görüntü oluşturur.
D2D1_CONVOLVEMATRIX_SCALE_MODE_CUBIC İlişkilendirme için 16 örnek kübik çekirdek kullanır. Bu mod en fazla işlem süresini kullanır, ancak daha yüksek kaliteli bir görüntü oluşturur.
D2D1_CONVOLVEMATRIX_SCALE_MODE_MULTI_SAMPLE_LINEAR İyi kenar diğer adlara karşı koruma için tek bir piksel içinde 4 doğrusal örnek kullanır. Bu mod, birkaç piksel içeren görüntülerde küçük miktarlarda ölçeği küçültmek için iyidir.
D2D1_CONVOLVEMATRIX_SCALE_MODE_ANISOTROPIC Bit eşlemin dönüştürülmüş şekline göre bir desen örneklemek için anizotropik filtreleme kullanır.
D2D1_CONVOLVEMATRIX_SCALE_MODE_HIGH_QUALITY_CUBIC Dönüştürme matrisinde downscaling söz konusuysa görüntüyü önceden küçültmek için değişken boyutlu yüksek kaliteli kübik çekirdek kullanır. Ardından son çıkış için küp ilişkilendirme modunu kullanır.

Not

Mod seçmezseniz efekt varsayılan olarak D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR olur.

Kenarlık modları

Ad Açıklama
D2D1_BORDER_MODE_SOFT Efekt, konvolüsyon çekirdeğini uyguladığında giriş sınırlarının dışındaki örnekler için giriş görüntüsünü saydam siyah piksellerle tuş takımına ekler. Bu, görüntü için yumuşak bir kenar oluşturur ve işlemde çıktı bit eşlemini çekirdeğin boyutuna göre genişletir.
D2D1_BORDER_MODE_HARD Etkisi, giriş görüntüsünü giriş sınırlarının dışındaki örnekler için yansıtma türü kenarlık dönüşümüyle genişletir. Çıktı bit eşleminin boyutu, giriş bit eşleminin boyutuna eşittir.

Çıktı bit eşlemi

Efektin çıkışının boyutu, konvolüsyon çekirdeğinin boyutuna, çekirdek uzaklığına, çekirdek birimi uzunluğuna ve kenarlık modu ayarına bağlıdır.

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