CMM(색 관리 모듈)은 디바이스 프로필의 정보를 사용하여 색 변환 및 색 매핑을 수행하는 WCS 코드의 모듈입니다. 애플리케이션 개발자는 CMM을 구현할 필요가 없습니다. Microsoft는 기본 CMM을 제공합니다. 그러나 특수한 색 변환 및 색 매핑 알고리즘을 사용해야 하는 소프트웨어를 작성하는 경우 만들 수 있습니다.
메모
CMM 진입점은 이며,은 API 함수가 아니므로 애플리케이션에서 호출해서는 안 됩니다.
CMM이 설치되면 설치 프로그램에서 해당 CMM을 Windows 레지스트리에 등록합니다. 애플리케이션은 등록된 CMM을 열거하고 SelectCMM 함수를 사용하여 CM을 선택할 수 있습니다. 다음 샘플 애플리케이션에서는 등록된 모든 CMM을 열거하는 방법을 보여 줍니다.
#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);
}