A color profile is a file that contains information that defines the color capabilities of a device. A color profile for a display monitor, for example, defines the chromaticities of the phosphors for that monitor; one for a printer defines the chromaticities of the inks on a given type of paper. The system uses this information when mapping logical colors to the physical colors available on the device.
Color profiles exist for display monitors, printers, and scanners. By default, the system uses the color profile that best matches a given device, based on information in the profile and provided by the device driver. If a color profile is not present for a given device, the system uses a default profile for that device.
In some cases, it may be important to let the user choose the color profile to use for a given device. This can occur when the device configuration has changed in a way that the system cannot detect. You can enumerate all color profiles for a device by using the EnumICMProfiles function. This identifies each color profile by passing its filename to an EnumICMProfilesProc callback function that you supply. You can set the color profile for the device by using the SetICMProfile function. You can determine the current color profile for the device by using the GetICMProfile function.
A color profile is available only if it is listed in the registry. You can install or remove color profiles in the registry by using the UpdateICMRegKey function. You can also use this function to query for printer profiles that match specified device settings, or to associate a color profile with a given color-matching DLL and output device.