Bagikan melalui


Efek transformasi affine 2D

Efek transformasi affine 2D menerapkan transformasi spasial ke gambar berdasarkan matriks 3X2 menggunakan matriks Direct2D mengubah dan salah satu dari enam mode interpolasi. Anda dapat menggunakan efek ini untuk memutar, menskalakan, condong, atau menerjemahkan gambar. Atau, Anda dapat menggabungkan operasi ini. Transfer affine mempertahankan garis paralel dan rasio jarak antara tiga titik dalam gambar.

CLSID untuk efek ini CLSID_D2D12DAffineTransform.

Contoh gambar

Sebelum
gambar sebelum efek.
Sesudah
gambar setelah transformasi.
ComPtr<ID2D1Effect> affineTransformEffect;
m_d2dContext->CreateEffect(CLSID_D2D12DAffineTransform, &affineTransformEffect);

affineTransformEffect->SetInput(0, bitmap);

D2D1_MATRIX_3X2_F matrix = D2D1::Matrix3x2F(0.9f, -0.1f,   0.1f, 0.9f,   8.0f, 45.0f);

affineTransformEffect->SetValue(D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX, matrix);

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

Efek ini melakukan operasi matriks ini:

operasi matriks affine

Meskipun matriks input didefinisikan sebagai matriks 3x2, kolom terakhir diisi dengan 0, 0 dan 1 untuk menghasilkan matriks persegi. Ini memungkinkan perkalian matriks, sehingga transformasi dapat digabungkan menjadi satu matriks.

Properti efek

Nama tampilan dan enumerasi indeks Deskripsi
InterpolationMode
D2D1_2DAFFINETRANSFORM_PROP_INTERPOLATION_MODE
Mode interpolasi yang digunakan untuk menskalakan gambar. Ada 6 mode skala yang berkisar dalam kualitas dan kecepatan.
Jenisnya D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE.
Nilai defaultnya adalah D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR.
BorderMode
D2D1_2DAFFINETRANSFORM_PROP_BORDER_MODE
Mode yang digunakan untuk menghitung batas gambar, lembut atau keras. Lihat mode batas untuk informasi selengkapnya.
Jenisnya D2D1_BORDER_MODE.
Nilai default adalah D2D1_BORDER_MODE_SOFT.
TransformMatrix
D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX
Matriks 3x2 untuk mengubah gambar menggunakan matriks Direct2D mengubah.
Jenis D2D1_MATRIX_3X2_F.
Nilai defaultnya adalah Matrix3x2F::Identity().
Ketajaman
D2D1_2DAFFINETRANSFORM_PROP_SHARPNESS
Dalam mode interpolasi kubik berkualitas tinggi, tingkat ketajaman filter penskalaan sebagai float antara 0 dan 1. Nilainya tidak bersatu. Anda dapat menggunakan ketajaman untuk menyesuaikan kualitas gambar saat Anda menskalakan gambar.
Faktor ketajaman mempengaruhi bentuk kernel. Semakin tinggi faktor ketajaman, semakin kecil kernel.
Catatan: Properti ini hanya memengaruhi mode interpolasi kubik berkualitas tinggi.
Jenisnya adalah FLOAT.
Nilai defaultnya adalah 0,0f.

Mode batas

Nama Deskripsi
D2D1_BORDER_MODE_SOFT Efek mengalihkan gambar dengan piksel hitam transparan saat diinterpolasi, menghasilkan tepi lembut.
D2D1_BORDER_MODE_HARD Efek menjepit output ke ukuran gambar input.

Mode interpolasi

Enumerasi Deskripsi
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR Sampel titik tunggal terdekat dan menggunakannya. Mode ini menggunakan lebih sedikit waktu pemrosesan, tetapi menghasilkan gambar kualitas terendah.
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR Menggunakan sampel empat titik dan interpolasi linier. Mode ini menggunakan lebih banyak waktu pemrosesan daripada mode tetangga terdekat, tetapi menghasilkan gambar berkualitas lebih tinggi.
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_CUBIC Menggunakan 16 sampel kernel kubik untuk interpolasi. Mode ini menggunakan waktu pemrosesan terbanyak, tetapi menghasilkan gambar berkualitas lebih tinggi.
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR Menggunakan 4 sampel linier dalam satu piksel untuk anti-aliasing tepi yang baik. Mode ini baik untuk menurunkan skala dengan jumlah kecil pada gambar dengan beberapa piksel.
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC Menggunakan pemfilteran anisotropic untuk mengambil sampel pola sesuai dengan bentuk bitmap yang diubah.
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC Menggunakan ukuran variabel kernel kubik berkualitas tinggi untuk melakukan pra-downscale gambar jika downscaling terlibat dalam matriks transformasi. Kemudian menggunakan mode interpolasi kubik untuk output akhir.

Nota

Jika Anda tidak memilih mode, efek akan default ke D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR.

Nota

Mode Anisotropic menghasilkan mipmap saat penskalaan, namun, jika Anda mengatur properti Cache ke true pada efek yang dimasukkan ke efek ini, mipmap tidak akan dihasilkan setiap kali untuk gambar yang cukup kecil.

Bitmap output

Ukuran bitmap output tergantung pada matriks transformasi yang diterapkan pada gambar.

Efek melakukan operasi transformasi lalu menerapkan kotak pembatas di sekitar hasil. Bitmap output adalah ukuran kotak pembatas.

Persyaratan

Syarat Nilai
Klien minimum yang didukung Pembaruan Windows 8 dan Platform untuk Windows 7 [aplikasi desktop | Aplikasi Bursa Windows]
Server minimum yang didukung Pembaruan Windows 8 dan Platform untuk Windows 7 [aplikasi desktop | Aplikasi Bursa Windows]
Header d2d1effects.h
Perpustakaan d2d1.lib, dxguid.lib

ID2D1Effect