カラー管理モジュール (CMM) の使用
カラー管理モジュール (CMM) は、デバイス プロファイルの情報を使用して色変換とカラー マッピングを実行する WCS コードのモジュールです。 アプリケーション開発者は、CMM を実装する必要はありません。 Microsoft は既定の CMM を提供します。 ただし、特殊な色変換アルゴリズムとカラー マッピング アルゴリズムを使用する必要があるソフトウェアを記述する場合は、作成できます。
注意
CMM エントリ ポイントは API 関数 ではなく 、アプリケーションによって呼び出されるべきではありません。
CMM がインストールされると、インストール プログラムによって Windows レジストリに登録されます。 アプリケーションでは、登録済みの CMM を列挙し、 SelectCMM 関数を使用して 1 つを選択できます。 次のサンプル アプリケーションは、登録されているすべての CM を列挙する方法を示しています。
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <string.h>
#include <mbstring.h>
#include <windows.h>
#include <icm.h>
#ifdef WINDOWS_98
TCHAR gszICMatcher[] = __TEXT(
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ICM\\ICMatchers");
#else
TCHAR gszICMatcher[] = __TEXT(
"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ICM\\ICMatchers");
#endif
_CRTAPI1 main (int argc, char *argv[])
{
DWORD dwNumCMM = 0;
HANDLE hkCMM;
DWORD dwErr = RegCreateKey(HKEY_LOCAL_MACHINE,
gszICMatcher, &hkCMM);
DWORD dwMaxName, dwMaxValue;
DWORD dwInfoErr = RegQueryInfoKey(&hkCMM, NULL, NULL,
NULL, NULL, NULL, NULL, NULL,
&dwMaxName, &dwMaxValue,
NULL, NULL);
TCHAR chCMM[dwMaxName];
ULONG cjCMM = sizeof(chCMM)/sizeof(chCMM[0]);
DWORD dwType;
TCHAR chCMMFile[dwMaxValue];
ULONG cjCMMFile = sizeof(chCMMFile)/sizeof(chCMMFile[0]);
if (dwErr != ERROR_SUCCESS)
{
printf("Could not open ICMatcher registry key: %d\n", dwErr);
}
if (dwErr == ERROR_SUCCESS)
{
while (RegEnumValue(
hkCMM,dwNumCMM,chCMM,
&cjCMM,NULL,&dwType,
chCMMFile,&cjCMMFile) == ERROR_SUCCESS)
{
if (dwType == REG_SZ)
{
printf("%d: %-80s - %-80s\n",dwNumCMM,chCMM,chCMMFile);
}
else
{
printf("%d: error\n");
}
dwNumCMM++;
cjCMM = sizeof(chCMM);
cjCMMFile = sizeof(chCMMFile);
}
}
RegCloseKey(hkCMM);
}