點陣圖來源效果
使用位圖來源效果,從 IWICBitmapSource 產生 ID2D1Image,以作為效果圖形中的輸入。 此效果會在 CPU 上執行縮放和旋轉。 它也可以選擇性地產生系統記憶體 mipmap,這可以是以各種縮減解析度主動調整非常大型影像的效能優化。
這個效果的 CLSID 是CLSID_D2D1BitmapSource。
效果屬性
顯示名稱和索引列舉 | 描述 |
---|---|
WicBitmapSource D2D1_BITMAPSOURCE_PROP_WIC_BITMAP_SOURCE |
IWICBitmapSource 包含要載入的影像數據。 此類型 IWICBitmapSource。 預設值為 NULL。 |
規模 D2D1_BITMAPSOURCE_PROP_SCALE |
X 和 Y 方向的尺規數量。 效果會將寬度乘以 X 值,而高度乘以 Y 值。 此屬性是定義為:(X 小數字數、Y 小數位數)的D2D1_VECTOR_2F。 尺規數量為 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 度。 |
此代碼段示範如何從EXIF方向值(在 propkey.h 中定義)轉換為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 管線只需要每個通道 (bpc) 8 位有效位數,或影像只提供 8 bpc 精確度,因此您應該轉換成 GUID_WICPixelFormat32bppPBGRA。 不過,如果您想要利用影像所提供的額外精確度(例如,儲存大於 8 bpc 精確度的 JPEG-XR 或 TIFF),您應該使用 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 |