Partager via


Utilisation des modules de gestion des couleurs (CMM)

Les modules de gestion des couleurs (CMM) sont des modules de code WCS qui utilisent les informations contenues dans les profils d’appareil pour effectuer la conversion des couleurs et le mappage des couleurs. Les développeurs d’applications ne doivent pas avoir à implémenter des MCM. Microsoft fournit la gestion CMM par défaut. Toutefois, si vous écrivez des logiciels qui nécessitent l’utilisation d’algorithmes de conversion de couleurs et de mappage de couleurs spécialisés, vous pouvez en créer un.

Notes

Les points d’entrée CMM ne sont pas des fonctions API et ne doivent pas être appelés par les applications.

 

Lorsque les machines virtuelles sont installées, le programme d’installation les inscrit dans le Registre Windows. Les applications peuvent énumérer les machines virtuelles inscrites et en sélectionner une à l’aide de la fonction SelectCMM . L’exemple d’application suivant montre comment énumérer toutes les MCM inscrites.

#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);
}