點陣圖來源效果
使用點陣圖來源效果從IWICBitmapSource產生ID2D1Image,以作為效果圖形中的輸入。 此效果會在 CPU 上執行縮放和旋轉。 它也可以選擇性地產生系統記憶體 Mipmap,這可以是以各種降低解析度主動調整非常大型影像的效能優化。
此效果的 CLSID CLSID_D2D1BitmapSource。
效果屬性
顯示名稱和索引列舉 | Description |
---|---|
WicBitmapSource D2D1_BITMAPSOURCE_PROP_WIC_BITMAP_SOURCE |
包含要載入之影像資料的 IWICBitmapSource 。 此類型為 IWICBitmapSource。 預設值是 NULL。 |
調整 D2D1_BITMAPSOURCE_PROP_SCALE |
X 和 Y 方向的縮放量。 效果會將寬度乘以 X 值,而高度乘以 Y 值。 此屬性定義為D2D1_VECTOR_2F: (X 小數位數、Y 尺規) 。 小數位數是 FLOAT、無單位,而且必須是正數或 0。 此類型為 D2D1_VECTOR_2F。 預設值為 {1.0f, 1.0f}。 |
InterpolationMode。 D2D1_BITMAPSOURCE_PROP_INTERPOLATION_MODE |
用來縮放影像的插補模式。 如需詳細資訊 ,請參閱插補模式 。 如果模式停用 Mipmap,BitmapSouce 會快取由 Scale 和 EnableDPICorrection 屬性所決定解析度的影像。 此類型為 D2D1_BITMAPSOURCE_INTERPOLATION_MODE。 預設值為 D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR。 |
EnableDPICorrection D2D1_BITMAPSOURCE_PROP_ENABLE_DPI_CORRECTION |
如果您將此設定為 TRUE,效果會縮放輸入影像,以將 IWICBitmapSource 所報告的 DPI 轉換為裝置內容的 DPI。 效果會使用您使用 InterpolationMode 屬性設定的插補模式。 如果您將此設定為 FALSE,效果會針對輸出影像使用 96.0 的 DPI。 此類型為 BOOL。 預設值為 FALSE。 |
AlphaMode D2D1_BITMAPSOURCE_PROP_ALPHA_MODE |
輸出的 Alpha 模式。 這可以是預乘或直線。 如需詳細資訊,請參閱 Alpha 模式 。 此類型為 D2D1_BITMAPSOURCE_ALPHA_MODE。 預設值為 D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED。 |
方向 D2D1_BITMAPSOURCE_PROP_ORIENTATION |
要對影像執行的翻轉和/或旋轉作業。 如需詳細資訊 ,請參閱方向 。 此類型為 D2D1_BITMAPSOURCE_ORIENTATION。 預設值為 D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT。 |
插補模式
當縮放影像或更正 DPI 時,效果會使用此模式插補。 這個效果所使用的插補模式是由 CPU 計算,而不是 GPU。
名稱 | 描述 |
---|---|
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_NEAREST_NEIGHBOR | 取樣最接近的單一點,並使用該點。 不會產生 mipmap。 |
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR | 使用四個點樣本和線性插補。 不會產生 mipmap。 |
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_CUBIC | 使用 16 個樣本立方核心進行插補。 不會產生 mipmap。 |
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_FANT | 使用 WIC 風扇插補,與 IWICBitmapScaler 介面相同。 不會產生 mipmap。 |
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_MIPMAP_LINEAR | 使用雙線性插補在系統記憶體中產生 mipmap 鏈結。 針對每個 Mipmap,效果會使用雙線性插補縮放至最接近 0.5 的倍數,然後使用線性插補來縮放剩餘的數量。 |
方向
Orientation 屬性可用來套用內嵌在影像中的 EXIF 方向旗標。
名稱 | 描述 |
---|---|
D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT | 預設值。 效果不會變更輸入的方向。 |
D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL | 水準翻轉影像。 |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180 | 順時針旋轉影像 180 度。 |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL | 順時針旋轉影像 180 度,並水準翻轉。 |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL | 將影像順時針旋轉 270 度,並水準翻轉。 |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90 | 順時針旋轉影像 90 度。 |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL | 將影像順時針旋轉 90 度,並水準翻轉。 |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270 | 順時針旋轉影像 270 度。 |
此程式碼片段示範如何從 propkey.h) 中定義的 EXIF 方向值 (轉換成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;
}
}
Alpha 模式
名稱 | 描述 |
---|---|
D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED | 效果輸出會使用預乘 Alpha。 |
D2D1_BITMAPSOURCE_ALPHA_MODE_STRAIGHT | 效果輸出會使用直線 Alpha。 |
備註
若要將 WIC 和 Direct2D 搭配使用時的效能優化,您應該使用 IWICFormatConverter ,根據您的應用程式案例和影像原生精確度轉換為適當的像素格式。
在大部分情況下,您的應用程式 Direct2D 管線只需要每個通道 8 位 (bpc) 精確度,或影像只提供 8 個 bpc 精確度,因此您應該轉換成GUID_WICPixelFormat32bppPBGRA。 不過,如果您想要利用影像 (所提供的額外精確度,例如 JPEG-XR 或 TIFF 儲存大於 8 bpc 精確度) ,您應該使用 RGBA 型像素格式。 下表提供更多詳細資料。
所需的有效位數 | 影像的原生精確度 | 建議的像素格式 |
---|---|---|
每個通道 8 位 | <= 每個通道 8 位 | GUID_WICPixelFormat32bppPBGRA |
盡可能高 | <= 每個通道 8 位 | GUID_WICPixelFormat32bppPBGRA |
盡可能高 | > 每個通道 8 位 | RGBA 通道順序,預乘 Alpha |
由於許多影像格式支援多個精確度層級,因此您應該使用 IWICBitmapSource::GetPixelFormat 來取得影像原生像素格式,然後使用 IWICPixelFormatInfo 來判斷該格式的每個有效位數通道有多少位數。 此外,請注意,並非所有硬體都支援高精確度像素格式。 在這些情況下,您的應用程式可能需要切換回 WARP 裝置,以支援高精確度。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 適用于 Windows 7 的 Windows 8 和平臺更新 [傳統型應用程式 |Windows 市集應用程式] |
最低支援的伺服器 | 適用于 Windows 7 的 Windows 8 和平臺更新 [傳統型應用程式 |Windows 市集應用程式] |
標頭 | d2d1effects.h |
程式庫 | d2d1.lib、dxguid.lib |