CreateMultiProfileTransform 函式 (icm.h)
接受設定檔陣列或單一 裝置連結設定檔 ,並建立可供應用程式用來執行色彩對應的色彩轉換。
語法
HTRANSFORM CreateMultiProfileTransform(
PHPROFILE pahProfiles,
DWORD nProfiles,
PDWORD padwIntent,
DWORD nIntents,
DWORD dwFlags,
DWORD indexPreferredCMM
);
參數
pahProfiles
要使用的設定檔控制碼陣列的指標。 函式會決定 HPROFILE 是否包含國際色彩聯盟 (ICC) 或 Windows Color System (WCS) 設定檔資訊,並適當地處理它們。 當 OpenColorProfileW 和 WcsOpenColorProfileW傳回有效的 WCS 設定檔時,這些設定檔控制碼會包含 DMP、CAMP 和 GMMP 設定檔的組合。
nProfiles
指定陣列中的設定檔數目。 最大值為 10。
padwIntent
要使用的意圖陣列指標。 每個意圖都是下列其中一個值:
-
INTENT_PERCEPTUAL
-
INTENT_SATURATION
-
INTENT_RELATIVE_COLORIMETRIC
-
INTENT_ABSOLUTE_COLORIMETRIC
GMMP 是意圖的一般化。 意圖的可能來源有兩種:「destination」 設定檔和 CreateMultiProfileTransform的意圖清單參數。 「目的地」一詞並未使用,因為配置檔案清單參數中的兩個設定檔會作為第一個目的地,然後作為來源。
如需詳細資訊,請參閱 轉譯意圖。
nIntents
指定意圖陣列中的專案數目:可以是 1 或與 nProfiles相同的值。 對於包含任何 WCS 設定檔的設定檔陣列,會忽略第一個轉譯意圖,而且只會針對這些設定檔陣列使用 nProfiles -1 元素。 nIntents的最大數目是 10。
dwFlags
指定用來控制轉換建立的旗標。 請參閱<備註>。
indexPreferredCMM
指定色彩設定檔的單一型索引,指出要使用的色彩管理模組 (CMM) 。 應用程式開發人員可讓 Windows 藉由將此參數設定為 INDEX_DONT_CARE 來選擇 CMM。 請參閱 使用色彩管理模組 (CMM) 協力廠商 CMM 僅適用于 ICC 工作流程。 包含 WCS 設定檔的設定檔陣列將會忽略此旗標。 當只使用 ICC 設定檔,以及使用WCS_ALWAYS旗標時,也會忽略它。
傳回值
如果此函式成功,則傳回值是色彩轉換的控制碼。
如果此函式失敗,則傳回值為 Null。 如需擴充錯誤資訊,請呼叫 GetLastError。
備註
如果使用裝置連結設定檔, 如果 nProfiles 未設定為 1,函式將會失敗。
意圖的陣列會指定如何結合設定檔。 第 n個意圖用於結合陣列中的 n個設定檔。 如果只指定一個意圖,則會用於第一個設定檔,而所有其他設定檔都會使用 Match 意圖來合併。
dwFlags中的值僅供提示使用。 色彩管理模組必須決定使用它們的最佳方式。
Windows Vista:已新增三個新的旗標,可搭配 dwFlags使用:
旗標 | 描述 |
---|---|
PRESERVEBLACK | 如果設定此位,轉換引擎會將適當的黑色產生 GMMP 插入為轉換順序中的最後一個 GMMP。 此旗標僅適用于純 WCS 轉換。 |
SEQUENTIAL_TRANSFORM | 如果設定此位,WCS 處理管線中的每個步驟都會針對影像中的每個圖元執行,而且不會建置任何優化的色彩轉換。 此旗標僅適用于純 WCS 轉換。限制:使用SEQUENTIAL_TRANSFORM旗標集所建立的轉換只能在建立它的執行緒中使用,而且一次只能用於一個色彩轉譯呼叫。 在建立循序轉換之前,必須先初始化 COM,而且必須在轉換物件的存留期內保持初始化狀態。 |
WCS_ALWAYS | 如果已設定此位,即使是所有 ICC 轉換也會使用 WCS 程式碼路徑。 |
注意
SEQUENTIAL_TRANSFORM意外省略 Windows Vista SDK 中的 icm.h 標頭。 如果您想要使用 SEQUENTIAL_TRANSFORM 旗標,請在應用程式中定義它,如下所示:
#define SEQUENTIAL_TRANSFORM 0x80800000
如需詳細資訊,請參閱 CMM 轉換建立旗標。 所有提及的旗標都支援所有類型的轉換,但FAST_TRANSLATE和USE_RELATIVE_COLORIMETRIC除外,這僅適用于純的 ICC 對 ICC 轉換。
CreateMultiProfileTransform函式是在裝置內容之外使用。 從色彩設定檔轉換成相同的色彩設定檔時,色彩可能會改變。 這是因為精確度錯誤。 因此,在這些情況下不應該執行色彩轉換。
我們建議來源與目的地 DMP 之間只有一個 GMMP。 從 DMP/CAMP 組合建立 (GBD) 的 Gamut 界限描述。 後續的 GMMP 會在處理鏈結中使用 BLOB 之前,直到序列中接下來有 DMP/CAMP GBD 使用為止。 例如,假設序列 DMP1、CAMP1、GMMP1、GMMP2、GMMP3、DMP2、CAMP2、GMMP4、GMMP5、CAMP3、DMP3。 然後 GMMP1,GMMP2 會使用 GBD1 作為其來源和目的地。 然後 GMMP3 會使用 GBD1 作為來源,並以 GBD2 作為目的地。 然後 GMMP4 會使用 GBD2 作為來源和目的地。 最後,GMMP5 使用 GBD2 做為來源,而 GBD3 作為目的地。 這假設沒有 GMMP 與其旁的一個相同。
針對 WCS 設定檔,建議您將轉譯意圖設定為 DWORD_MAX,以便在 WCS 設定檔控制碼內使用 GMMP。 這是因為轉譯意圖的陣列優先于 HPROFILEs 所指定或包含在設定檔中的轉譯意圖或遊戲對應模型。 轉譯意圖的陣列會參考這些轉譯意圖的預設 GMMP。 在理想情況下,使用 WCS 設定檔資訊建立 HPROFILE 時,只會在來源和目的地裝置之間執行一個遊戲對應,方法是將其中一個或其他 GMMP 設定為 Null 。 任何使用 WCS DMP 的繼承應用程式都會叫用一連串的 GMMP。 系統會根據 DMP 和 CAMP 選擇 GB。 針對中繼 GMMP 遊戲界限,會使用來源和目的地 GBD。
總而言之,如果 nIntents == 1,則會根據 padwIntent 值的 GMMP 來設定第一個 GMM,除非該值是DWORD_MAX,在此情況下會使用第二個設定檔的內嵌 GMM 資訊, (內嵌 GMM 資訊是 GMMP,或在 ICC 設定檔的案例中, 與設定檔標頭中的意圖相對應的基準 GMM) 。 GMM 的其餘部分會根據 RelativeColorimetric 設定為預設值* 的 GMMP 來設定。
如果nIntents = nProfiles -1,則每個 GMM 都會根據在對應索引的padwIntent陣列中設定為預設值* 的 GMMP,但padwIntent值是DWORD_MAX。 針對DWORD_MAX 之 padwIntent 陣列中的值,對應位置的 GMM 會根據 GMM 所對應之兩個設定檔第二個設定檔中的內嵌 GMM 資訊進行設定。 (同樣地,內嵌 GMM 資訊是 GMMP,或者,如果是 ICC 設定檔,則會從設定檔標頭) 對應至** 意圖的基準 GMM。
如果nIntents = nProfiles,則會忽略第一個意圖,而且函式的行為就像nIntents = nProfiles -1 一樣。
padwIntents和nIntents的任何其他組合都會傳回錯誤。
* 「set as default」 表示使用 WcsGetDefaultColorProfile 查詢預設 GMMP,並將其 profileManagementScope 參數設定為 WCS_PROFILE_MANAGEMENT_SCOPE_CURRENT_USER。 這可能會傳回目前使用者或全系統預設值,如 WcsGetDefaultColorProfile檔中所述。
** 「GMM 對應至」 並不表示 「GMM from the GMMP set as default for」。 相反地,這表示「ICC 設定檔意圖與基準 GMM 演算法之間的常數關聯」。
對 ICC ColorSpace 設定檔的 WCS 轉換支援僅限於 RGB 色彩空間設定檔。 下列 ICC 配置檔案類型不能用於 CITE 處理的轉換中,可能是混合的 WCS/ICC 轉換,或是具有 WCS_ALWAYS 集的 all-ICC 轉換:
- 非 RGB ColorSpace 設定檔
- NamedColor 設定檔
- n 通道設定檔 (其中 n > 8)
- DeviceLink 設定檔
- 抽象設定檔
需求
最低支援的用戶端 | Windows 2000 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
標頭 | icm.h |
程式庫 | Mscms.lib |
Dll | Mscms.dll |