Использование Модулей управления цветом (CMM)


Модули управления цветом (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);
}

 

Назад в оглавление
На главную страницу

Hosted by uCoz