點陣圖來源效果

使用點陣圖來源效果從IWICBitmapSource產生ID2D1Image,以作為效果圖形中的輸入。 此效果會在 CPU 上執行縮放和旋轉。 它也可以選擇性地產生系統記憶體 Mipmap,這可以是以各種降低解析度主動調整非常大型影像的效能優化。

注意

點陣圖來源效果會採用其輸入做為屬性,而不是影像輸入。 您必須使用 SetValue 方法,而不是 SetInput 方法。 WicBitmapSource屬性是您指定影像輸入資料的位置。

此效果的 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

ID2D1Effect