Модули управления цветом (CMM) - это модули кода ICM, которые используют информацию в профилях устройства, чтобы выполнить преобразование и подбор цвета. Разработчикам прикладных программ не придется реализовывать CMM. Microsoft обеспечивает Модулем управления цветом (CMM) по умолчанию. Однако, если Вы пишете программное обеспечение, которое требует использования специализированного преобразования цвета и алгоритмов подбора цвета, то Вы можете создать его.
Обратите внимание! на то, что точки входа Модуля управления цветом (CMM) не функции программного интерфейса приложения (API) и их нельзя вызывать приложениями. |
Когда Модули управления цветом (CMM) установлены, инсталляционная программа регистрирует их в реестре Windows. Приложения могут перечислить зарегистрированные Модули управления цветом (CMM) и выбрать один из них, используя функцию SelectCMM. Нижеследующее типовое приложение демонстрирует, как перечислить все зарегистрированные Модули управления цветом (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); } |