Efek sumber bitmap
Gunakan efek sumber bitmap untuk menghasilkan ID2D1Image dari IWICBitmapSource untuk digunakan sebagai input dalam grafik efek. Efek ini melakukan penskalaan dan rotasi pada CPU. Ini juga dapat secara opsional menghasilkan mipmap memori sistem, yang dapat menjadi pengoptimalan performa untuk secara aktif menskalakan gambar yang sangat besar pada berbagai resolusi yang dikurangi.
Catatan
Efek sumber bitmap mengambil inputnya sebagai properti , bukan sebagai input gambar. Anda harus menggunakan metode SetValue , bukan metode SetInput . Properti WicBitmapSource adalah tempat Anda menentukan data input gambar.
CLSID untuk efek ini CLSID_D2D1BitmapSource.
Nama tampilan dan enumerasi indeks | Deskripsi |
---|---|
WicBitmapSource D2D1_BITMAPSOURCE_PROP_WIC_BITMAP_SOURCE |
IWICBitmapSource yang berisi data gambar yang akan dimuat. Jenisnya adalah IWICBitmapSource. Nilai defaultnya adalah NULL. |
Skala D2D1_BITMAPSOURCE_PROP_SCALE |
Jumlah skala dalam arah X dan Y. Efek mengalikan lebar dengan nilai X dan tinggi dengan nilai Y. Properti ini adalah D2D1_VECTOR_2F yang didefinisikan sebagai: (skala X, skala Y). Jumlah skalanya adalah FLOAT, tanpa unit, dan harus positif atau 0. Jenisnya D2D1_VECTOR_2F. Nilai defaultnya adalah {1.0f, 1.0f}. |
InterpolationMode. D2D1_BITMAPSOURCE_PROP_INTERPOLATION_MODE |
Mode interpolasi yang digunakan untuk menskalakan gambar. Lihat Mode interpolasi untuk informasi selengkapnya. Jika mode menonaktifkan mipmap, maka BitmapSouce akan menyimpan gambar pada resolusi yang ditentukan oleh properti Skala dan EnableDPICorrection. Jenisnya D2D1_BITMAPSOURCE_INTERPOLATION_MODE. Nilai defaultnya adalah D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR. |
EnableDPICorrection D2D1_BITMAPSOURCE_PROP_ENABLE_DPI_CORRECTION |
Jika Anda mengatur ini ke TRUE, efeknya akan menskalakan gambar input untuk mengonversi DPI yang dilaporkan oleh IWICBitmapSource ke DPI konteks perangkat. Efeknya menggunakan mode interpolasi yang Anda tetapkan dengan properti InterpolationMode. Jika Anda mengatur ini ke FALSE, efeknya menggunakan DPI 96,0 untuk gambar output. Jenisnya adalah BOOL. Nilai defaultnya adalah FALSE. |
AlphaMode D2D1_BITMAPSOURCE_PROP_ALPHA_MODE |
Mode alfa output. Ini bisa berupa premultiplied atau lurus. Lihat Mode alfa untuk informasi selengkapnya. Jenisnya D2D1_BITMAPSOURCE_ALPHA_MODE. Nilai defaultnya adalah D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED. |
Orientasi D2D1_BITMAPSOURCE_PROP_ORIENTATION |
Operasi balik dan/atau rotasi yang akan dilakukan pada gambar. Lihat Orientasi untuk informasi selengkapnya. Jenisnya D2D1_BITMAPSOURCE_ORIENTATION. Nilai defaultnya adalah D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT. |
Efek menginterpolasi menggunakan mode ini saat menskalakan gambar atau ketika memperbaiki DPI. Mode interpolasi yang digunakan efek ini dihitung oleh CPU, bukan GPU.
Nama | Deskripsi |
---|---|
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_NEAREST_NEIGHBOR | Sampel titik tunggal terdekat dan menggunakannya. Tidak menghasilkan mipmap. |
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR | Menggunakan sampel empat titik dan interpolasi linier. Tidak menghasilkan mipmap. |
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_CUBIC | Menggunakan 16 sampel kernel kubik untuk interpolasi. Tidak menghasilkan mipmap. |
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_FANT | Menggunakan interpolasi fant WIC, sama dengan antarmuka IWICBitmapScaler . Tidak menghasilkan mipmap. |
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_MIPMAP_LINEAR | Menghasilkan rantai mipmap dalam memori sistem menggunakan interpolasi bilinear. Untuk setiap mipmap efek menskalakan ke kelipatan terdekat 0,5 menggunakan interpolasi bilinear dan kemudian menskalakan jumlah yang tersisa menggunakan interpolasi linier. |
Properti Orientasi dapat digunakan untuk menerapkan bendera orientasi EXIF yang disematkan dalam gambar.
Nama | Deskripsi |
---|---|
D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT | Default. Efeknya tidak mengubah orientasi input. |
D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL | Membalik gambar secara horizontal. |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180 | Memutar gambar searah jajar 180 derajat. |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL | Memutar gambar searah jarang 180 derajat dan membaliknya secara horizontal. |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL | Memutar gambar searah jarang 270 derajat dan membaliknya secara horizontal. |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90 | Memutar gambar searah jajar 90 derajat. |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL | Memutar gambar searah jarang 90 derajat dan membaliknya secara horizontal. |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270 | Memutar gambar searah jaga 270 derajat. |
Cuplikan kode ini menunjukkan cara mengonversi dari nilai orientasi EXIF (didefinisikan dalam propkey.h) menjadi nilai D2D1_BITMAPSOURCE_ORIENTATION.
#include <propkey.h>
#include <d2d1effects.h>
D2D1_BITMAPSOURCE_ORIENTATION GetBitmapSourceOrientation(unsigned short PhotoOrientation)
{
switch (PhotoOrientation)
{
case PHOTO_ORIENTATION_NORMAL:
return D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT;
case PHOTO_ORIENTATION_FLIPHORIZONTAL:
return D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL;
case PHOTO_ORIENTATION_ROTATE180:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180;
case PHOTO_ORIENTATION_FLIPVERTICAL:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL;
case PHOTO_ORIENTATION_TRANSPOSE:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL;
case PHOTO_ORIENTATION_ROTATE270:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90;
case PHOTO_ORIENTATION_TRANSVERSE:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL;
case PHOTO_ORIENTATION_ROTATE90:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270;
default:
return D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT;
}
}
Nama | Deskripsi |
---|---|
D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED | Output efek menggunakan alfa yang telah ditentukan sebelumnya. |
D2D1_BITMAPSOURCE_ALPHA_MODE_STRAIGHT | Output efek menggunakan alfa lurus. |
Untuk mengoptimalkan performa saat menggunakan WIC dan Direct2D bersama-sama, Anda harus menggunakan IWICFormatConverter untuk mengonversi ke format piksel yang sesuai berdasarkan skenario aplikasi Anda dan presisi asli gambar.
Dalam kebanyakan kasus, alur Direct2D aplikasi Anda hanya memerlukan 8 bit per saluran (bpc) presisi, atau gambar hanya menyediakan presisi 8 bpc, dan oleh karena itu Anda harus mengonversi ke GUID_WICPixelFormat32bppPBGRA. Namun, jika Anda ingin memanfaatkan presisi ekstra yang disediakan oleh gambar (misalnya, JPEG-XR atau TIFF yang disimpan dengan presisi lebih dari 8 bpc), Anda harus menggunakan format piksel berbasis RGBA. Tabel di bawah ini menyediakan detail selengkapnya.
Presisi yang diinginkan | Presisi asli gambar | Format piksel yang direkomendasikan |
---|---|---|
8 bit per saluran | <= 8 bit per saluran | GUID_WICPixelFormat32bppPBGRA |
Setinggka mungkin | <= 8 bit per saluran | GUID_WICPixelFormat32bppPBGRA |
Setinggka mungkin | > 8 bit per saluran | Urutan saluran RGBA, alfa yang telah diisi sebelumnya |
Karena banyak format gambar mendukung beberapa tingkat presisi, Anda harus menggunakan IWICBitmapSource::GetPixelFormat untuk mendapatkan format piksel asli gambar, lalu menggunakan IWICPixelFormatInfo untuk menentukan berapa banyak bit per saluran presisi yang tersedia untuk format tersebut. Selain itu, perhatikan bahwa tidak semua perangkat keras mendukung format piksel presisi tinggi. Dalam kasus tersebut, aplikasi Anda mungkin perlu kembali ke perangkat WARP untuk mendukung presisi tinggi.
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows 8 dan Pembaruan Platform untuk Windows 7 [aplikasi desktop | Aplikasi Bursa Windows] |
Server minimum yang didukung | Windows 8 dan Pembaruan Platform untuk Windows 7 [aplikasi desktop | Aplikasi Bursa Windows] |
Header | d2d1effects.h |
Pustaka | d2d1.lib, dxguid.lib |