| Server IP : 209.209.40.120 / Your IP : 216.73.217.112 Web Server : Microsoft-IIS/10.0 System : Windows NT NEWWWW 10.0 build 17763 (Windows Server 2019) i586 User : NEWWWW$ ( 0) PHP Version : 8.3.30 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/um/ |
Upload File : |
/*++
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
icm.h
Abstract:
Public header file for Image Color Management
Revision History:
--*/
#ifndef _ICM_H_
#define _ICM_H_
#if _MSC_VER > 1000
#pragma once
#endif
#include <winapifamily.h>
#pragma region Modern Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
#ifdef __cplusplus
extern "C" {
#endif
//
// Support for named color profiles
//
typedef char COLOR_NAME[32];
typedef COLOR_NAME *PCOLOR_NAME, *LPCOLOR_NAME;
typedef struct tagNAMED_PROFILE_INFO{
DWORD dwFlags;
DWORD dwCount;
DWORD dwCountDevCoordinates;
COLOR_NAME szPrefix;
COLOR_NAME szSuffix;
} NAMED_PROFILE_INFO;
typedef NAMED_PROFILE_INFO *PNAMED_PROFILE_INFO, *LPNAMED_PROFILE_INFO;
//
// Color spaces
//
// The following color spaces are supported.
// Gray, RGB, CMYK, XYZ, Yxy, Lab, generic 3 channel color spaces where
// the profiles defines how to interpret the 3 channels, named color spaces
// which can either be indices into the space or have color names, and
// multichannel spaces with 1 byte per channel up to MAX_COLOR_CHANNELS.
//
#define MAX_COLOR_CHANNELS 8 // maximum number of HiFi color channels
struct GRAYCOLOR {
WORD gray;
};
struct RGBCOLOR {
WORD red;
WORD green;
WORD blue;
};
struct CMYKCOLOR {
WORD cyan;
WORD magenta;
WORD yellow;
WORD black;
};
struct XYZCOLOR {
WORD X;
WORD Y;
WORD Z;
};
struct YxyCOLOR {
WORD Y;
WORD x;
WORD y;
};
struct LabCOLOR {
WORD L;
WORD a;
WORD b;
};
struct GENERIC3CHANNEL {
WORD ch1;
WORD ch2;
WORD ch3;
};
struct NAMEDCOLOR {
DWORD dwIndex;
};
struct HiFiCOLOR {
BYTE channel[MAX_COLOR_CHANNELS];
};
#if _MSC_VER > 1200
#pragma warning(push)
#pragma warning(disable:4201) // nameless struct/union
#endif
typedef union tagCOLOR {
struct GRAYCOLOR gray;
struct RGBCOLOR rgb;
struct CMYKCOLOR cmyk;
struct XYZCOLOR XYZ;
struct YxyCOLOR Yxy;
struct LabCOLOR Lab;
struct GENERIC3CHANNEL gen3ch;
struct NAMEDCOLOR named;
struct HiFiCOLOR hifi;
struct { // alignment padding.
DWORD reserved1;
VOID *reserved2;
};
} COLOR;
typedef COLOR *PCOLOR, *LPCOLOR;
#if _MSC_VER > 1200
#pragma warning(pop)
#endif
typedef enum {
COLOR_GRAY = 1,
COLOR_RGB,
COLOR_XYZ,
COLOR_Yxy,
COLOR_Lab,
COLOR_3_CHANNEL, // WORD per channel
COLOR_CMYK,
COLOR_5_CHANNEL, // BYTE per channel
COLOR_6_CHANNEL, // - do -
COLOR_7_CHANNEL, // - do -
COLOR_8_CHANNEL, // - do -
COLOR_NAMED,
} COLORTYPE;
typedef COLORTYPE *PCOLORTYPE, *LPCOLORTYPE;
//
// Rendering Intents
//
// + INTENT_PERCEPTUAL = LCS_GM_IMAGES for LOGCOLORSPACE
// = DMICM_CONTRAST for DEVMODE
// = "Pictures" for SetupColorMathing/Printer UI
//
// + INTENT_RELATIVE_COLORIMETRIC = LCS_GM_GRAPHICS for LOGCOLORSPACE
// = DMICM_COLORIMETRIC for DEVMODE
// = "Proof" for SetupColorMatching/Printer UI
//
// + INTENT_SATURATION = LCS_GM_BUSINESS for LOGCOLORSPACE
// = DMICM_SATURATE for DEVMODE
// = "Graphics" for SetupColorMatching/Printer UI
//
// + INTENT_ABSOLUTE_COLORIMETRIC = LCS_GM_ABS_COLORIMETRIC for LOGCOLORSPACE
// = DMICM_ABS_COLORIMETRIC for DEVMODE
// = "Match" for SetupColorMatching/Printer UI
//
#define INTENT_PERCEPTUAL 0
#define INTENT_RELATIVE_COLORIMETRIC 1
#define INTENT_SATURATION 2
#define INTENT_ABSOLUTE_COLORIMETRIC 3
#if NTDDI_VERSION >= NTDDI_VISTA
typedef enum {
CPT_ICC,
CPT_DMP,
CPT_CAMP,
CPT_GMMP
} COLORPROFILETYPE;
typedef COLORPROFILETYPE *PCOLORPROFILETYPE, *LPCOLORPROFILETYPE;
typedef enum {
// intent
CPST_PERCEPTUAL = INTENT_PERCEPTUAL,
CPST_RELATIVE_COLORIMETRIC = INTENT_RELATIVE_COLORIMETRIC,
CPST_SATURATION = INTENT_SATURATION,
CPST_ABSOLUTE_COLORIMETRIC = INTENT_ABSOLUTE_COLORIMETRIC,
// working space
CPST_NONE,
CPST_RGB_WORKING_SPACE,
CPST_CUSTOM_WORKING_SPACE,
// advanced color aware
CPST_STANDARD_DISPLAY_COLOR_MODE,
CPST_EXTENDED_DISPLAY_COLOR_MODE
} COLORPROFILESUBTYPE;
typedef COLORPROFILESUBTYPE *PCOLORPROFILESUBTYPE, *LPCOLORPROFILESUBTYPE;
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */
#pragma endregion
#pragma region Desktop Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
//
// Device color data type
//
typedef enum {
COLOR_BYTE = 1, // BYTE per channel. data range [0, 255]
COLOR_WORD, // WORD per channel. data range [0, 65535]
COLOR_FLOAT, // FLOAT per channel. IEEE 32-bit floating point
COLOR_S2DOT13FIXED, // WORD per channel. data range [-4, +4] using s2.13
//#if NTDDI_VERSION >= NTDDI_WIN7
COLOR_10b_R10G10B10A2, // Packed WORD per channel. data range [0, 1]
COLOR_10b_R10G10B10A2_XR, // Packed extended range WORD per channel. data range [-1, 3]
// using 4.0 scale and -1.0 bias.
COLOR_FLOAT16 // FLOAT16 per channel.
//#endif //NTDDI_VERSION >= NTDDI_WIN7
} COLORDATATYPE;
typedef COLORDATATYPE *PCOLORDATATYPE, *LPCOLORDATATYPE;
#endif // NTDDI_VERSION >= NTDDI_VISTA
//
// Bitmap formats supported
//
typedef enum {
//
// 16bpp - 5 bits per channel. The most significant bit is ignored.
//
BM_x555RGB = 0x0000,
BM_x555XYZ = 0x0101,
BM_x555Yxy,
BM_x555Lab,
BM_x555G3CH,
//
// Packed 8 bits per channel => 8bpp for GRAY and
// 24bpp for the 3 channel colors, more for hifi channels
//
BM_RGBTRIPLETS = 0x0002,
BM_BGRTRIPLETS = 0x0004,
BM_XYZTRIPLETS = 0x0201,
BM_YxyTRIPLETS,
BM_LabTRIPLETS,
BM_G3CHTRIPLETS,
BM_5CHANNEL,
BM_6CHANNEL,
BM_7CHANNEL,
BM_8CHANNEL,
BM_GRAY,
//
// 32bpp - 8 bits per channel. The most significant byte is ignored
// for the 3 channel colors.
//
BM_xRGBQUADS = 0x0008,
BM_xBGRQUADS = 0x0010,
BM_xG3CHQUADS = 0x0304,
BM_KYMCQUADS,
BM_CMYKQUADS = 0x0020,
//
// 32bpp - 10 bits per channel. The 2 most significant bits are ignored.
//
BM_10b_RGB = 0x0009,
BM_10b_XYZ = 0x0401,
BM_10b_Yxy,
BM_10b_Lab,
BM_10b_G3CH,
//
// 32bpp - named color indices (1-based)
//
BM_NAMED_INDEX,
//
// Packed 16 bits per channel => 16bpp for GRAY and
// 48bpp for the 3 channel colors.
//
BM_16b_RGB = 0x000A,
BM_16b_XYZ = 0x0501,
BM_16b_Yxy,
BM_16b_Lab,
BM_16b_G3CH,
BM_16b_GRAY,
//
// 16 bpp - 5 bits for Red & Blue, 6 bits for Green
//
BM_565RGB = 0x0001,
//#if NTDDI_VERSION >= NTDDI_VISTA
//
// scRGB - 32 bits per channel floating point
// 16 bits per channel floating point
//
BM_32b_scRGB = 0x0601,
BM_32b_scARGB = 0x0602,
BM_S2DOT13FIXED_scRGB = 0x0603,
BM_S2DOT13FIXED_scARGB = 0x0604,
//#endif // NTDDI_VERSION >= NTDDI_VISTA
//#if NTDDI_VERSION >= NTDDI_WIN7
BM_R10G10B10A2 = 0x0701,
BM_R10G10B10A2_XR = 0x0702,
BM_R16G16B16A16_FLOAT = 0x0703
//#endif // NTDDI_VERSION >= NTDDI_WIN7
} BMFORMAT;
typedef BMFORMAT *PBMFORMAT, *LPBMFORMAT;
//
// Callback function definition
//
typedef BOOL (WINAPI *PBMCALLBACKFN)(ULONG, ULONG, LPARAM);
typedef PBMCALLBACKFN LPBMCALLBACKFN;
//
// ICC profile header
//
typedef struct tagPROFILEHEADER {
DWORD phSize; // profile size in bytes
DWORD phCMMType; // CMM for this profile
DWORD phVersion; // profile format version number
DWORD phClass; // type of profile
DWORD phDataColorSpace; // color space of data
DWORD phConnectionSpace; // PCS
DWORD phDateTime[3]; // date profile was created
DWORD phSignature; // magic number
DWORD phPlatform; // primary platform
DWORD phProfileFlags; // various bit settings
DWORD phManufacturer; // device manufacturer
DWORD phModel; // device model number
DWORD phAttributes[2]; // device attributes
DWORD phRenderingIntent; // rendering intent
CIEXYZ phIlluminant; // profile illuminant
DWORD phCreator; // profile creator
BYTE phReserved[44]; // reserved for future use
} PROFILEHEADER;
typedef PROFILEHEADER *PPROFILEHEADER, *LPPROFILEHEADER;
//
// Profile class values
//
#define CLASS_MONITOR 'mntr'
#define CLASS_PRINTER 'prtr'
#define CLASS_SCANNER 'scnr'
#define CLASS_LINK 'link'
#define CLASS_ABSTRACT 'abst'
#define CLASS_COLORSPACE 'spac'
#define CLASS_NAMED 'nmcl'
#if NTDDI_VERSION >= NTDDI_VISTA
#define CLASS_CAMP 'camp'
#define CLASS_GMMP 'gmmp'
#endif // NTDDI_VERSION >= NTDDI_VISTA
//
// Color space values
//
#define SPACE_XYZ 'XYZ '
#define SPACE_Lab 'Lab '
#define SPACE_Luv 'Luv '
#define SPACE_YCbCr 'YCbr'
#define SPACE_Yxy 'Yxy '
#define SPACE_RGB 'RGB '
#define SPACE_GRAY 'GRAY'
#define SPACE_HSV 'HSV '
#define SPACE_HLS 'HLS '
#define SPACE_CMYK 'CMYK'
#define SPACE_CMY 'CMY '
#define SPACE_2_CHANNEL '2CLR'
#define SPACE_3_CHANNEL '3CLR'
#define SPACE_4_CHANNEL '4CLR'
#define SPACE_5_CHANNEL '5CLR'
#define SPACE_6_CHANNEL '6CLR'
#define SPACE_7_CHANNEL '7CLR'
#define SPACE_8_CHANNEL '8CLR'
//
// Profile flag bitfield values
//
#define FLAG_EMBEDDEDPROFILE 0x00000001
#define FLAG_DEPENDENTONDATA 0x00000002
//
// Profile flag bits for vendor extensions (bytes 44..45 of the ICC profile header).
//
#if NTDDI_VERSION >= NTDDI_VISTA
//
// Enable support for chromatic adaptation.
//
#define FLAG_ENABLE_CHROMATIC_ADAPTATION 0x02000000
#endif // NTDDI_VERSION >= NTDDI_VISTA
//
// Profile attributes bitfield values
//
#define ATTRIB_TRANSPARENCY 0x00000001
#define ATTRIB_MATTE 0x00000002
//
// Profile data structure
//
typedef struct tagPROFILE {
DWORD dwType; // profile type
PVOID pProfileData; // filename or buffer containing profile
DWORD cbDataSize; // size of profile data
} PROFILE;
typedef PROFILE *PPROFILE, *LPPROFILE;
//
// Profile types to be used in the PROFILE structure
//
#define PROFILE_FILENAME 1 // profile data is NULL terminated filename
#define PROFILE_MEMBUFFER 2 // profile data is a buffer containing
// the profile
//
// Desired access mode for opening profiles
//
#define PROFILE_READ 1 // opened for read access
#define PROFILE_READWRITE 2 // opened for read and write access
//
// Handles returned to applications
//
typedef HANDLE HPROFILE; // handle to profile object
typedef HPROFILE *PHPROFILE;
typedef HANDLE HTRANSFORM; // handle to color transform object
//
// CMM selection for CreateMultiProfileTransform and SelectCMM.
//
#define INDEX_DONT_CARE 0
#define CMM_FROM_PROFILE INDEX_DONT_CARE // Use CMM specified in profile.
#define CMM_WINDOWS_DEFAULT 'Win ' // Use Windows default CMM always.
//
// Tags found in ICC profiles
//
typedef DWORD TAGTYPE;
typedef TAGTYPE *PTAGTYPE, *LPTAGTYPE;
//
// Profile enumeration data structure
//
#define ENUM_TYPE_VERSION 0x0300
typedef struct tagENUMTYPEA {
DWORD dwSize; // structure size
DWORD dwVersion; // structure version
DWORD dwFields; // bit fields
PCSTR pDeviceName; // device friendly name
DWORD dwMediaType; // media type
DWORD dwDitheringMode; // dithering mode
DWORD dwResolution[2]; // x and y resolutions
DWORD dwCMMType; // cmm ID
DWORD dwClass; // profile class
DWORD dwDataColorSpace; // color space of data
DWORD dwConnectionSpace; // pcs
DWORD dwSignature; // magic number
DWORD dwPlatform; // primary platform
DWORD dwProfileFlags; // various bit settings in profile
DWORD dwManufacturer; // manufacturer ID
DWORD dwModel; // model ID
DWORD dwAttributes[2]; // device attributes
DWORD dwRenderingIntent; // rendering intent
DWORD dwCreator; // profile creator
DWORD dwDeviceClass; // device class
} ENUMTYPEA, *PENUMTYPEA, *LPENUMTYPEA;
typedef struct tagENUMTYPEW {
DWORD dwSize; // structure size
DWORD dwVersion; // structure version
DWORD dwFields; // bit fields
PCWSTR pDeviceName; // device friendly name
DWORD dwMediaType; // media type
DWORD dwDitheringMode; // dithering mode
DWORD dwResolution[2]; // x and y resolutions
DWORD dwCMMType; // cmm ID
DWORD dwClass; // profile class
DWORD dwDataColorSpace; // color space of data
DWORD dwConnectionSpace; // pcs
DWORD dwSignature; // magic number
DWORD dwPlatform; // primary platform
DWORD dwProfileFlags; // various bit settings in profile
DWORD dwManufacturer; // manufacturer ID
DWORD dwModel; // model ID
DWORD dwAttributes[2]; // device attributes
DWORD dwRenderingIntent; // rendering intent
DWORD dwCreator; // profile creator
DWORD dwDeviceClass; // device class
} ENUMTYPEW, *PENUMTYPEW, *LPENUMTYPEW;
//
// Bitfields for enumeration record above
//
#define ET_DEVICENAME 0x00000001
#define ET_MEDIATYPE 0x00000002
#define ET_DITHERMODE 0x00000004
#define ET_RESOLUTION 0x00000008
#define ET_CMMTYPE 0x00000010
#define ET_CLASS 0x00000020
#define ET_DATACOLORSPACE 0x00000040
#define ET_CONNECTIONSPACE 0x00000080
#define ET_SIGNATURE 0x00000100
#define ET_PLATFORM 0x00000200
#define ET_PROFILEFLAGS 0x00000400
#define ET_MANUFACTURER 0x00000800
#define ET_MODEL 0x00001000
#define ET_ATTRIBUTES 0x00002000
#define ET_RENDERINGINTENT 0x00004000
#define ET_CREATOR 0x00008000
#define ET_DEVICECLASS 0x00010000
#define ET_STANDARDDISPLAYCOLOR 0x00020000
#define ET_EXTENDEDDISPLAYCOLOR 0x00040000
#if NTDDI_VERSION >= NTDDI_VISTA
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
#pragma endregion
#pragma region Modern Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
//
// WCS profile management scope - system-wide and current-user
//
typedef enum
{
WCS_PROFILE_MANAGEMENT_SCOPE_SYSTEM_WIDE,
WCS_PROFILE_MANAGEMENT_SCOPE_CURRENT_USER
} WCS_PROFILE_MANAGEMENT_SCOPE;
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */
#pragma endregion
#pragma region Desktop Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
#endif // NTDDI_VERSION >= NTDDI_VISTA
//
// Flags for creating color transforms
//
#define PROOF_MODE 0x00000001
#define NORMAL_MODE 0x00000002
#define BEST_MODE 0x00000003
#define ENABLE_GAMUT_CHECKING 0x00010000
#define USE_RELATIVE_COLORIMETRIC 0x00020000
#define FAST_TRANSLATE 0x00040000
#if NTDDI_VERSION >= NTDDI_VISTA
#define PRESERVEBLACK 0x00100000
#define WCS_ALWAYS 0x00200000
#define SEQUENTIAL_TRANSFORM 0x80800000
#endif // NTDDI_VERSION >= NTDDI_VISTA
#define RESERVED 0x80000000
//
// Parameter for GetPS2ColorSpaceArray
//
#define CSA_A 1
#define CSA_ABC 2
#define CSA_DEF 3
#define CSA_DEFG 4
#define CSA_GRAY 5
#define CSA_RGB 6
#define CSA_CMYK 7
#define CSA_Lab 8
//
// Parameter for CMGetInfo()
//
#define CMM_WIN_VERSION 0
#define CMM_IDENT 1
#define CMM_DRIVER_VERSION 2
#define CMM_DLL_VERSION 3
#define CMM_VERSION 4
#define CMM_DESCRIPTION 5
#define CMM_LOGOICON 6
//
// Parameter for CMTranslateRGBs()
//
#define CMS_FORWARD 0
#define CMS_BACKWARD 1
//
// Constants for SetupColorMatching()
//
#define COLOR_MATCH_VERSION 0x0200
//
// Constants for flags
//
#define CMS_DISABLEICM 1 // Disable color matching
#define CMS_ENABLEPROOFING 2 // Enable proofing
#define CMS_SETRENDERINTENT 4 // Use passed in value
#define CMS_SETPROOFINTENT 8
#define CMS_SETMONITORPROFILE 0x10 // Use passed in profile name initially
#define CMS_SETPRINTERPROFILE 0x20
#define CMS_SETTARGETPROFILE 0x40
#define CMS_USEHOOK 0x80 // Use hook procedure in lpfnHook
#define CMS_USEAPPLYCALLBACK 0x100 // Use callback procedure when applied
#define CMS_USEDESCRIPTION 0x200 // Use profile description in UI
// (default is filename)
#define CMS_DISABLEINTENT 0x400 // Disable intent selection (render & proofing) always
#define CMS_DISABLERENDERINTENT 0x800 // Disable rendering intent selection while in proofing mode
// Only proofing intent selection is enabled.
//
// Used to denote too-small buffers (output only)
//
#define CMS_MONITOROVERFLOW 0x80000000L
#define CMS_PRINTEROVERFLOW 0x40000000L
#define CMS_TARGETOVERFLOW 0x20000000L
//
// Structures (both ANSI and Unicode)
//
struct _tagCOLORMATCHSETUPW;
struct _tagCOLORMATCHSETUPA;
typedef BOOL (WINAPI *PCMSCALLBACKW)(struct _tagCOLORMATCHSETUPW *,LPARAM);
typedef BOOL (WINAPI *PCMSCALLBACKA)(struct _tagCOLORMATCHSETUPA *,LPARAM);
typedef struct _tagCOLORMATCHSETUPW {
DWORD dwSize; // Size of structure in bytes
DWORD dwVersion; // Set to COLOR_MATCH_VERSION
DWORD dwFlags; // See constants listed previously
HWND hwndOwner; // Window handle of owner
PCWSTR pSourceName; // Name of Image Source, defaults to "sRGB Color Space"
PCWSTR pDisplayName; // If null, defaults to first enumerated monitor
PCWSTR pPrinterName; // If null, defaults to default printer.
DWORD dwRenderIntent; // Rendering Intent
DWORD dwProofingIntent; // Rendering Intent for Proofing
PWSTR pMonitorProfile; // Monitor profile name
DWORD ccMonitorProfile; // Size of above in characters
PWSTR pPrinterProfile; // Printer profile name
DWORD ccPrinterProfile; // Size of above in characters
PWSTR pTargetProfile; // Target profile name
DWORD ccTargetProfile; // Size of above in characters
DLGPROC lpfnHook; // Hook Procedure address
LPARAM lParam; // Given to hook procedure at WM_INITDIALOG
PCMSCALLBACKW lpfnApplyCallback; // Callback Procedure address when apply is pushed
LPARAM lParamApplyCallback; // Given to callback Procedure for apply
} COLORMATCHSETUPW, *PCOLORMATCHSETUPW, *LPCOLORMATCHSETUPW;
typedef struct _tagCOLORMATCHSETUPA {
DWORD dwSize; // Size of structure in bytes
DWORD dwVersion; // Set to COLOR_MATCH_VERSION
DWORD dwFlags; // See constants listed previously
HWND hwndOwner; // Window handle of owner
PCSTR pSourceName; // Name of Image Source, defaults to "This Document"
PCSTR pDisplayName; // If null, defaults to first enumerated monitor
PCSTR pPrinterName; // If null, defaults to default printer.
DWORD dwRenderIntent; // Rendering Intent
DWORD dwProofingIntent; // Rendering Intent for Proofing
PSTR pMonitorProfile; // Monitor profile name
DWORD ccMonitorProfile; // Size of above in characters
PSTR pPrinterProfile; // Printer profile name
DWORD ccPrinterProfile; // Size of above in characters
PSTR pTargetProfile; // Target profile name
DWORD ccTargetProfile; // Size of above in characters
DLGPROC lpfnHook; // Hook Procedure address
LPARAM lParam; // Given to hook procedure at WM_INITDIALOG
PCMSCALLBACKA lpfnApplyCallback; // Callback Procedure address when apply is pushed
LPARAM lParamApplyCallback; // Given to callback Procedure for apply
} COLORMATCHSETUPA, *PCOLORMATCHSETUPA, *LPCOLORMATCHSETUPA;
//
// Windows API definitions
//
HPROFILE WINAPI OpenColorProfileA(_In_ PPROFILE pProfile, DWORD dwDesiredAccess, DWORD dwShareMode, DWORD dwCreationMode);
HPROFILE WINAPI OpenColorProfileW(_In_ PPROFILE pProfile, DWORD dwDesiredAccess, DWORD dwShareMode, DWORD dwCreationMode);
BOOL WINAPI CloseColorProfile(_In_opt_ HPROFILE hProfile);
BOOL WINAPI GetColorProfileFromHandle(_In_ HPROFILE hProfile, _Out_writes_bytes_opt_(*pcbProfile) PBYTE pProfile, _Inout_ PDWORD pcbProfile);
BOOL WINAPI IsColorProfileValid(_In_ HPROFILE hProfile, _Out_ PBOOL pbValid);
BOOL WINAPI CreateProfileFromLogColorSpaceA(_In_ LPLOGCOLORSPACEA pLogColorSpace, _Outptr_result_buffer_(_Inexpressible_(GlobalSize(*pProfile))) PBYTE* pProfile);
BOOL WINAPI CreateProfileFromLogColorSpaceW(_In_ LPLOGCOLORSPACEW pLogColorSpace, _Outptr_result_buffer_(_Inexpressible_(GlobalSize(*pProfile))) PBYTE* pProfile);
BOOL WINAPI GetCountColorProfileElements(_In_ HPROFILE hProfile, _Out_ PDWORD pnElementCount);
BOOL WINAPI GetColorProfileHeader(_In_ HPROFILE hProfile, _Out_ PPROFILEHEADER pHeader);
BOOL WINAPI GetColorProfileElementTag(_In_ HPROFILE hProfile, DWORD dwIndex, _Out_ PTAGTYPE pTag);
BOOL WINAPI IsColorProfileTagPresent(_In_ HPROFILE hProfile, TAGTYPE tag, _Out_ PBOOL pbPresent);
BOOL WINAPI GetColorProfileElement(_In_ HPROFILE hProfile, TAGTYPE tag, DWORD dwOffset, _Inout_ PDWORD pcbElement, _Out_writes_bytes_opt_(*pcbElement) PVOID pElement, _Out_ PBOOL pbReference);
BOOL WINAPI SetColorProfileHeader(_In_ HPROFILE hProfile, _In_reads_bytes_(sizeof(PROFILEHEADER)) PPROFILEHEADER pHeader);
BOOL WINAPI SetColorProfileElementSize(_In_ HPROFILE hProfile, TAGTYPE tagType, DWORD pcbElement);
BOOL WINAPI SetColorProfileElement(_In_ HPROFILE hProfile, TAGTYPE tag, DWORD dwOffset, _In_ PDWORD pcbElement, _In_reads_(*pcbElement) PVOID pElement);
BOOL WINAPI SetColorProfileElementReference(_In_ HPROFILE hProfile, TAGTYPE newTag, TAGTYPE refTag);
BOOL WINAPI GetPS2ColorSpaceArray(_In_ HPROFILE hProfile, DWORD dwIntent, DWORD dwCSAType, _Out_writes_bytes_opt_(*pcbPS2ColorSpaceArray) PBYTE pPS2ColorSpaceArray, _Inout_ PDWORD pcbPS2ColorSpaceArray, _Out_ PBOOL pbBinary);
BOOL WINAPI GetPS2ColorRenderingIntent(_In_ HPROFILE hProfile, DWORD dwIntent, _Out_writes_bytes_opt_(*pcbPS2ColorRenderingIntent) PBYTE pBuffer, _Inout_ PDWORD pcbPS2ColorRenderingIntent);
BOOL WINAPI GetPS2ColorRenderingDictionary(_In_ HPROFILE hProfile, DWORD dwIntent, _Out_writes_bytes_opt_(*pcbPS2ColorRenderingDictionary) PBYTE pPS2ColorRenderingDictionary, _Inout_ PDWORD pcbPS2ColorRenderingDictionary, _Inout_ PBOOL pbBinary);
BOOL WINAPI GetNamedProfileInfo(_In_ HPROFILE hProfile, _Inout_updates_bytes_(sizeof(NAMED_PROFILE_INFO)) PNAMED_PROFILE_INFO pNamedProfileInfo);
BOOL WINAPI ConvertColorNameToIndex(_In_ HPROFILE hProfile, _In_reads_(dwCount) PCOLOR_NAME paColorName, _Out_writes_(dwCount) PDWORD paIndex, DWORD dwCount);
BOOL WINAPI ConvertIndexToColorName(_In_ HPROFILE hProfile, _In_reads_(dwCount) PDWORD paIndex, _Out_writes_(dwCount) PCOLOR_NAME paColorName, DWORD dwCount);
BOOL WINAPI CreateDeviceLinkProfile(_In_reads_(nProfiles) PHPROFILE hProfile, DWORD nProfiles, _In_reads_(nIntents) PDWORD padwIntent, DWORD nIntents, DWORD dwFlags, _Outptr_result_buffer_(_Inexpressible_(GlobalSize(*pProfileData))) PBYTE* pProfileData, DWORD indexPreferredCMM);
HTRANSFORM WINAPI CreateColorTransformA(_In_ LPLOGCOLORSPACEA pLogColorSpace, _In_ HPROFILE hDestProfile, _In_ HPROFILE hTargetProfile, DWORD dwFlags);
HTRANSFORM WINAPI CreateColorTransformW(_In_ LPLOGCOLORSPACEW pLogColorSpace, _In_ HPROFILE hDestProfile, _In_ HPROFILE hTargetProfile, DWORD dwFlags);
HTRANSFORM WINAPI CreateMultiProfileTransform(_In_reads_(nProfiles) PHPROFILE pahProfiles, DWORD nProfiles, _In_reads_(nIntents) PDWORD padwIntent, DWORD nIntents, DWORD dwFlags, DWORD indexPreferredCMM);
BOOL WINAPI DeleteColorTransform(_Inout_ HTRANSFORM hxform);
BOOL WINAPI TranslateBitmapBits(_In_ HTRANSFORM hColorTransform, _In_ PVOID pSrcBits, BMFORMAT bmInput, DWORD dwWidth, DWORD dwHeight, DWORD dwInputStride, _Out_ PVOID pDestBits, BMFORMAT bmOutput, DWORD dwOutputStride, _In_opt_ __callback PBMCALLBACKFN pfnCallBack, _In_opt_ LPARAM ulCallbackData);
BOOL WINAPI CheckBitmapBits(_In_ HTRANSFORM hColorTransform, _In_ PVOID pSrcBits, BMFORMAT bmInput, DWORD dwWidth, DWORD dwHeight, DWORD dwStride, _Out_writes_(dwWidth * dwHeight) PBYTE paResult, _In_opt_ __callback PBMCALLBACKFN pfnCallback, _In_opt_ LPARAM lpCallbackData);
BOOL WINAPI TranslateColors(_In_ HTRANSFORM hColorTransform, _In_reads_(nColors) PCOLOR paInputColors, DWORD nColors, COLORTYPE ctInput, _Out_writes_(nColors) PCOLOR paOutputColors, COLORTYPE ctOutput);
BOOL WINAPI CheckColors(_In_ HTRANSFORM hColorTransform, _In_reads_(nColors) PCOLOR paInputColors, DWORD nColors, COLORTYPE ctInput, _Out_writes_(nColors) PBYTE paResult);
DWORD WINAPI GetCMMInfo(_In_ HTRANSFORM hColorTransform, _In_ DWORD);
BOOL WINAPI RegisterCMMA(_In_opt_ PCSTR pMachineName, _In_ DWORD cmmID, _In_ PCSTR pCMMdll);
BOOL WINAPI RegisterCMMW(_In_opt_ PCWSTR pMachineName, _In_ DWORD cmmID, _In_ PCWSTR pCMMdll);
BOOL WINAPI UnregisterCMMA(_In_opt_ PCSTR pMachineName, _In_ DWORD cmmID);
BOOL WINAPI UnregisterCMMW(_In_opt_ PCWSTR pMachineName, _In_ DWORD cmmID);
BOOL WINAPI SelectCMM(DWORD dwCMMType);
BOOL
WINAPI
GetColorDirectoryA(
_In_opt_ PCSTR pMachineName,
_Out_writes_bytes_to_opt_(*pdwSize, *pdwSize) PSTR pBuffer,
_Inout_ PDWORD pdwSize
);
BOOL
WINAPI
GetColorDirectoryW(
_In_opt_ PCWSTR pMachineName,
_Out_writes_bytes_to_opt_(*pdwSize, *pdwSize) PWSTR pBuffer,
_Inout_ PDWORD pdwSize
);
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
#pragma endregion
#pragma region Modern Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
BOOL WINAPI InstallColorProfileA(_In_opt_ PCSTR pMachineName, _In_ PCSTR pProfileName);
BOOL WINAPI InstallColorProfileW(_In_opt_ PCWSTR pMachineName, _In_ PCWSTR pProfileName);
#ifdef UNICODE
#define InstallColorProfile InstallColorProfileW
#else
#define InstallColorProfile InstallColorProfileA
#endif // !UNICODE
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */
#pragma endregion
#pragma region Desktop Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
BOOL WINAPI UninstallColorProfileA(_In_opt_ PCSTR pMachineName, _In_ PCSTR pProfileName, BOOL bDelete);
BOOL WINAPI UninstallColorProfileW(_In_opt_ PCWSTR pMachineName, _In_ PCWSTR pProfileName, BOOL bDelete);
BOOL WINAPI EnumColorProfilesA(_In_opt_ PCSTR pMachineName, _In_ PENUMTYPEA pEnumRecord, _Out_writes_bytes_opt_(*pdwSizeOfEnumerationBuffer) PBYTE pEnumerationBuffer, _Inout_ PDWORD pdwSizeOfEnumerationBuffer, _Out_opt_ PDWORD pnProfiles);
BOOL WINAPI EnumColorProfilesW(_In_opt_ PCWSTR pMachineName, _In_ PENUMTYPEW pEnumRecord, _Out_writes_bytes_opt_(*pdwSizeOfEnumerationBuffer) PBYTE pEnumerationBuffer, _Inout_ PDWORD pdwSizeOfEnumerationBuffer, _Out_opt_ PDWORD pnProfiles);
BOOL WINAPI SetStandardColorSpaceProfileA(_In_opt_ PCSTR pMachineName, DWORD dwProfileID, _In_ PCSTR pProfilename);
BOOL WINAPI SetStandardColorSpaceProfileW(_In_opt_ PCWSTR pMachineName, DWORD dwProfileID, _In_ PCWSTR pProfileName);
_Success_(return != FALSE)
BOOL
WINAPI
GetStandardColorSpaceProfileA(
_In_opt_ PCSTR pMachineName,
_In_ DWORD dwSCS,
_Out_writes_bytes_to_opt_(*pcbSize, *pcbSize) PSTR pBuffer,
_Inout_ PDWORD pcbSize
);
_Success_(return != FALSE)
BOOL
WINAPI
GetStandardColorSpaceProfileW(
_In_opt_ PCWSTR pMachineName,
_In_ DWORD dwSCS,
_Out_writes_bytes_to_opt_(*pcbSize, *pcbSize) PWSTR pBuffer,
_Inout_ PDWORD pcbSize
);
BOOL WINAPI AssociateColorProfileWithDeviceA(_In_opt_ PCSTR pMachineName, _In_ PCSTR pProfileName, _In_ PCSTR pDeviceName);
BOOL WINAPI AssociateColorProfileWithDeviceW(_In_opt_ PCWSTR pMachineName, _In_ PCWSTR pProfileName, _In_ PCWSTR pDeviceName);
BOOL WINAPI DisassociateColorProfileFromDeviceA(_In_opt_ PCSTR pMachineName, _In_ PCSTR pProfileName, _In_ PCSTR pDeviceName);
BOOL WINAPI DisassociateColorProfileFromDeviceW(_In_opt_ PCWSTR pMachineName, _In_ PCWSTR pProfileName, _In_ PCWSTR pDeviceName);
BOOL WINAPI SetupColorMatchingW(_Inout_updates_bytes_(sizeof(COLORMATCHSETUPW)) PCOLORMATCHSETUPW pcms);
BOOL WINAPI SetupColorMatchingA(_Inout_updates_bytes_(sizeof(COLORMATCHSETUPA)) PCOLORMATCHSETUPA pcms);
#if NTDDI_VERSION >= NTDDI_VISTA
BOOL
WINAPI
WcsAssociateColorProfileWithDevice(
_In_ WCS_PROFILE_MANAGEMENT_SCOPE scope,
_In_ PCWSTR pProfileName,
_In_ PCWSTR pDeviceName
);
BOOL
WINAPI
WcsDisassociateColorProfileFromDevice(
_In_ WCS_PROFILE_MANAGEMENT_SCOPE scope,
_In_ PCWSTR pProfileName,
_In_ PCWSTR pDeviceName
);
BOOL
WINAPI
WcsEnumColorProfilesSize(
_In_ WCS_PROFILE_MANAGEMENT_SCOPE scope,
_In_ PENUMTYPEW pEnumRecord,
_Out_ PDWORD pdwSize
);
BOOL
WINAPI
WcsEnumColorProfiles(
_In_ WCS_PROFILE_MANAGEMENT_SCOPE scope,
_In_ PENUMTYPEW pEnumRecord,
_Out_writes_bytes_(dwSize) PBYTE pBuffer,
_In_ DWORD dwSize,
_Out_opt_ PDWORD pnProfiles
);
BOOL
WINAPI
WcsGetDefaultColorProfileSize(
_In_ WCS_PROFILE_MANAGEMENT_SCOPE scope,
_In_opt_ PCWSTR pDeviceName,
_In_ COLORPROFILETYPE cptColorProfileType,
_In_ COLORPROFILESUBTYPE cpstColorProfileSubType,
_In_ DWORD dwProfileID,
_Out_ PDWORD pcbProfileName
);
BOOL
WINAPI
WcsGetDefaultColorProfile(
_In_ WCS_PROFILE_MANAGEMENT_SCOPE scope,
_In_opt_ PCWSTR pDeviceName,
_In_ COLORPROFILETYPE cptColorProfileType,
_In_ COLORPROFILESUBTYPE cpstColorProfileSubType,
_In_ DWORD dwProfileID,
_In_ DWORD cbProfileName,
_Out_writes_bytes_(cbProfileName) LPWSTR pProfileName
);
BOOL
WINAPI
WcsSetDefaultColorProfile(
_In_ WCS_PROFILE_MANAGEMENT_SCOPE scope,
_In_opt_ PCWSTR pDeviceName,
_In_ COLORPROFILETYPE cptColorProfileType,
_In_ COLORPROFILESUBTYPE cpstColorProfileSubType,
_In_ DWORD dwProfileID,
_In_opt_ LPCWSTR pProfileName
);
BOOL
WINAPI
WcsSetDefaultRenderingIntent(
_In_ WCS_PROFILE_MANAGEMENT_SCOPE scope,
_In_ DWORD dwRenderingIntent
);
BOOL
WINAPI
WcsGetDefaultRenderingIntent(
_In_ WCS_PROFILE_MANAGEMENT_SCOPE scope,
_Out_ PDWORD pdwRenderingIntent
);
BOOL
WINAPI
WcsGetUsePerUserProfiles(
_In_ LPCWSTR pDeviceName,
_In_ DWORD dwDeviceClass,
_Out_ PBOOL pUsePerUserProfiles
);
BOOL
WINAPI
WcsSetUsePerUserProfiles(
_In_ LPCWSTR pDeviceName,
_In_ DWORD dwDeviceClass,
_In_ BOOL usePerUserProfiles
);
BOOL
WINAPI
WcsTranslateColors(
_In_ HTRANSFORM hColorTransform,
_In_ DWORD nColors,
_In_ DWORD nInputChannels,
_In_ COLORDATATYPE cdtInput,
_In_ DWORD cbInput,
_In_reads_bytes_(cbInput) PVOID pInputData,
_In_ DWORD nOutputChannels,
_In_ COLORDATATYPE cdtOutput,
_In_ DWORD cbOutput,
_Out_writes_bytes_(cbOutput) PVOID pOutputData
);
BOOL
WINAPI
WcsCheckColors(
_In_ HTRANSFORM hColorTransform,
_In_ DWORD nColors,
_In_ DWORD nInputChannels,
_In_ COLORDATATYPE cdtInput,
_In_ DWORD cbInput,
_In_reads_bytes_(cbInput) PVOID pInputData,
_Out_writes_(nColors) PBYTE paResult
);
//
// The APIs SetupColorMatchingA and SetupColorMatchingW are
// deprecated as of Windows Vista. The implementations in icmui.dll
// now SetLastError to ERROR_NOT_SUPPORTED, and return FALSE.
//
#pragma deprecated (SetupColorMatchingA)
#pragma deprecated (SetupColorMatchingW)
#endif // NTDDI_VERSION >= NTDDI_VISTA
#ifdef UNICODE
#define ENUMTYPE ENUMTYPEW
#define PENUMTYPE PENUMTYPEW
#define COLORMATCHSETUP COLORMATCHSETUPW
#define PCOLORMATCHSETUP PCOLORMATCHSETUPW
#define LPCOLORMATCHSETUP LPCOLORMATCHSETUPW
#define PCMSCALLBACK PCMSCALLBACKW
#define CreateColorTransform CreateColorTransformW
#define OpenColorProfile OpenColorProfileW
#define CreateProfileFromLogColorSpace CreateProfileFromLogColorSpaceW
#define RegisterCMM RegisterCMMW
#define UnregisterCMM UnregisterCMMW
#define GetColorDirectory GetColorDirectoryW
#define UninstallColorProfile UninstallColorProfileW
#define AssociateColorProfileWithDevice AssociateColorProfileWithDeviceW
#define DisassociateColorProfileFromDevice DisassociateColorProfileFromDeviceW
#define EnumColorProfiles EnumColorProfilesW
#define SetStandardColorSpaceProfile SetStandardColorSpaceProfileW
#define GetStandardColorSpaceProfile GetStandardColorSpaceProfileW
#define SetupColorMatching SetupColorMatchingW
#if NTDDI_VERSION >= NTDDI_VISTA
#define WcsOpenColorProfile WcsOpenColorProfileW
#endif // NTDDI_VERSION >= NTDDI_VISTA
#else
#define ENUMTYPE ENUMTYPEA
#define PENUMTYPE PENUMTYPEA
#define COLORMATCHSETUP COLORMATCHSETUPA
#define PCOLORMATCHSETUP PCOLORMATCHSETUPA
#define LPCOLORMATCHSETUP LPCOLORMATCHSETUPA
#define PCMSCALLBACK PCMSCALLBACKA
#define CreateColorTransform CreateColorTransformA
#define OpenColorProfile OpenColorProfileA
#define CreateProfileFromLogColorSpace CreateProfileFromLogColorSpaceA
#define RegisterCMM RegisterCMMA
#define UnregisterCMM UnregisterCMMA
#define GetColorDirectory GetColorDirectoryA
#define UninstallColorProfile UninstallColorProfileA
#define AssociateColorProfileWithDevice AssociateColorProfileWithDeviceA
#define DisassociateColorProfileFromDevice DisassociateColorProfileFromDeviceA
#define EnumColorProfiles EnumColorProfilesA
#define SetStandardColorSpaceProfile SetStandardColorSpaceProfileA
#define GetStandardColorSpaceProfile GetStandardColorSpaceProfileA
#define SetupColorMatching SetupColorMatchingA
#if NTDDI_VERSION >= NTDDI_VISTA
#define WcsOpenColorProfile WcsOpenColorProfileA
#endif // NTDDI_VERSION >= NTDDI_VISTA
#endif // !UNICODE
//
// Transform returned by CMM
//
typedef HANDLE HCMTRANSFORM;
//
// Pointer to ICC color profile data.
//
typedef PVOID LPDEVCHARACTER;
//
// CMM API definition
//
BOOL WINAPI CMCheckColors(
_In_ HCMTRANSFORM hcmTransform, // transform handle
_In_reads_(nColors) LPCOLOR lpaInputColors, // array of COLORs
DWORD nColors, // COLOR array size
COLORTYPE ctInput, // input color type
_Out_writes_(nColors) LPBYTE lpaResult // buffer for results
);
BOOL WINAPI CMCheckRGBs(
_In_ HCMTRANSFORM hcmTransform, // transform handle
_In_ LPVOID lpSrcBits, // source bitmap bits
BMFORMAT bmInput, // source bitmap format
DWORD dwWidth, // source bitmap width
DWORD dwHeight, // source bitmap hight
DWORD dwStride, // source bitmap delta
_Out_writes_(dwWidth * dwHeight) LPBYTE lpaResult, // buffer for results
__callback PBMCALLBACKFN pfnCallback, // pointer to callback function
LPARAM ulCallbackData // caller-defined parameter to callback
);
BOOL WINAPI CMConvertColorNameToIndex(
_In_ HPROFILE hProfile,
_In_reads_(dwCount) PCOLOR_NAME paColorName,
_Out_writes_(dwCount) PDWORD paIndex,
DWORD dwCount
);
BOOL WINAPI CMConvertIndexToColorName(
_In_ HPROFILE hProfile,
_In_reads_(dwCount) PDWORD paIndex,
_Out_writes_(dwCount) PCOLOR_NAME paColorName,
DWORD dwCount
);
BOOL WINAPI CMCreateDeviceLinkProfile(
_In_reads_(nProfiles) PHPROFILE pahProfiles, // array of profile handles
DWORD nProfiles, // profile handle array size
_In_reads_(nIntents) PDWORD padwIntents, // array of rendering intents
DWORD nIntents, // intent array size
DWORD dwFlags, // transform creation flags
_Outptr_result_buffer_(_Inexpressible_(GlobalSize(*lpProfileData))) LPBYTE *lpProfileData // pointer to pointer to buffer
);
HCMTRANSFORM WINAPI CMCreateMultiProfileTransform(
_In_reads_(nProfiles) PHPROFILE pahProfiles, // array of profile handles
DWORD nProfiles, // profile handle array size
_In_reads_(nIntents) PDWORD padwIntents, // array of rendering intents
DWORD nIntents, // intent array size
DWORD dwFlags // transform creation flags
);
BOOL WINAPI CMCreateProfileW(
_Inout_ LPLOGCOLORSPACEW lpColorSpace, // pointer to a logical color space
_Out_ LPDEVCHARACTER *lpProfileData // pointer to pointer to buffer
);
//
// The CMM APIs CMCreateTransform, CMCreateTransformW, and CMCreateTransformExt are
// deprecated as of Windows Vista, and CMM implementors are no longer required to
// implement them. The implementations in the default CMM (icm32.dll) in Windows Vista
// now SetLastError to ERROR_NOT_SUPPORTED, and return an invalid transform handle
// (a value < 256).
//
HCMTRANSFORM WINAPI CMCreateTransform(
_In_ LPLOGCOLORSPACEA lpColorSpace, // pointer to logical color space
_In_ LPDEVCHARACTER lpDevCharacter, // profile data
_In_ LPDEVCHARACTER lpTargetDevCharacter // target profile data
);
HCMTRANSFORM WINAPI CMCreateTransformW(
_In_ LPLOGCOLORSPACEW lpColorSpace, // pointer to logical color space
_In_ LPDEVCHARACTER lpDevCharacter, // profile data
_In_ LPDEVCHARACTER lpTargetDevCharacter // target profile data
);
HCMTRANSFORM WINAPI CMCreateTransformExt(
_In_ LPLOGCOLORSPACEA lpColorSpace, // pointer to logical color space
_In_ LPDEVCHARACTER lpDevCharacter, // profile data
_In_ LPDEVCHARACTER lpTargetDevCharacter, // target profile data
_In_ DWORD dwFlags // creation flags
);
//
// The CMM APIs CMCheckColorsInGamut, CMCreateProfile, CMTranslateRGB and CMTranslateRGBs are
// deprecated as of Windows 7, and CMM implementors are no longer required to
// implement them. The implementations in the default CMM (icm32.dll) in Windows 7
// now SetLastError to ERROR_NOT_SUPPORTED, and return FALSE.
//
BOOL WINAPI CMCheckColorsInGamut(
_In_ HCMTRANSFORM hcmTransform, // transform handle
_In_reads_(nCount) RGBTRIPLE *lpaRGBTriple, // RGB triple array
_Out_writes_bytes_(nCount) LPBYTE lpaResult, // buffer for results
UINT nCount // result buffer size
);
BOOL WINAPI CMCreateProfile(
_Inout_ LPLOGCOLORSPACEA lpColorSpace, // pointer to a logical color space
_Out_ LPDEVCHARACTER *lpProfileData // pointer to pointer to buffer
);
BOOL WINAPI CMTranslateRGB(
_In_ HCMTRANSFORM hcmTransform,
COLORREF ColorRef,
_Out_ LPCOLORREF lpColorRef,
DWORD dwFlags
);
BOOL WINAPI CMTranslateRGBs(
_In_ HCMTRANSFORM hcmTransform,
_In_ LPVOID lpSrcBits,
BMFORMAT bmInput,
DWORD dwWidth,
DWORD dwHeight,
DWORD dwStride,
_Out_ LPVOID lpDestBits,
BMFORMAT bmOutput,
DWORD dwTranslateDirection
);
#if NTDDI_VERSION >= NTDDI_VISTA
#pragma deprecated (CMCreateTransform)
#pragma deprecated (CMCreateTransformW)
#pragma deprecated (CMCreateTransformExt)
#pragma deprecated (CMCheckColorsInGamut)
#pragma deprecated (CMCreateProfile)
#pragma deprecated (CMTranslateRGB)
#endif // NTDDI_VERSION >= NTDDI_VISTA
#if NTDDI_VERSION > NTDDI_VISTA
#pragma deprecated (CMTranslateRGBs)
#endif // NTDDI_VERSION > NTDDI_VISTA
HCMTRANSFORM WINAPI CMCreateTransformExtW(
_In_ LPLOGCOLORSPACEW lpColorSpace, // pointer to logical color space
_In_ LPDEVCHARACTER lpDevCharacter, // profile data
_In_ LPDEVCHARACTER lpTargetDevCharacter, // target profile data
_In_ DWORD dwFlags // creation flags
);
BOOL WINAPI CMDeleteTransform(
_Inout_ HCMTRANSFORM hcmTransform // transform handle to be deleted.
);
DWORD WINAPI CMGetInfo(
DWORD dwInfo
);
BOOL WINAPI CMGetNamedProfileInfo(
_In_ HPROFILE hProfile, // profile handle
_Inout_ PNAMED_PROFILE_INFO pNamedProfileInfo // pointer to named profile info
);
BOOL WINAPI CMGetPS2ColorRenderingDictionary(
_In_ HPROFILE hProfile,
DWORD dwIntent,
_Out_writes_bytes_opt_(*lpcbSize) LPBYTE lpBuffer,
_Inout_ LPDWORD lpcbSize,
_Inout_ LPBOOL lpbBinary
);
BOOL WINAPI CMGetPS2ColorRenderingIntent(
_In_ HPROFILE hProfile,
DWORD dwIntent,
_Out_writes_bytes_opt_(*lpcbSize) LPBYTE lpBuffer,
_Inout_ LPDWORD lpcbSize
);
BOOL WINAPI CMGetPS2ColorSpaceArray(
_In_ HPROFILE hProfile,
DWORD dwIntent,
DWORD dwCSAType,
_Out_writes_bytes_opt_(*lpcbSize) LPBYTE lpBuffer,
_Inout_ LPDWORD lpcbSize,
_Inout_ LPBOOL lpbBinary
);
BOOL WINAPI CMIsProfileValid(
_In_ HPROFILE hProfile, // proflle handle
_Out_ LPBOOL lpbValid // buffer for result.
);
BOOL WINAPI CMTranslateColors(
_In_ HCMTRANSFORM hcmTransform, // transform handle
_In_reads_(nColors) LPCOLOR lpaInputColors, // pointer to input color array
DWORD nColors, // number of color in color array
COLORTYPE ctInput, // input color type
_Out_writes_(nColors) LPCOLOR lpaOutputColors, // pointer to output color array
COLORTYPE ctOutput // output color type
);
BOOL WINAPI CMTranslateRGBsExt(
_In_ HCMTRANSFORM hcmTransform,
_In_ LPVOID lpSrcBits,
BMFORMAT bmInput,
DWORD dwWidth,
DWORD dwHeight,
DWORD dwInputStride,
_Out_ LPVOID lpDestBits,
BMFORMAT bmOutput,
DWORD dwOutputStride,
__callback LPBMCALLBACKFN lpfnCallback,
LPARAM ulCallbackData
);
#if NTDDI_VERSION >= NTDDI_VISTA
//
// Windows Color System APIs
//
//
// Passed in as a bit-flag for dwFlags, this instructs WcsOpenColorProfile
// to ignore any embedded Wcs information in the WcsProfiles tag if the input
// profile is an ICC one.
//
#define DONT_USE_EMBEDDED_WCS_PROFILES 0x00000001L
HPROFILE WINAPI WcsOpenColorProfileA(
_In_ PPROFILE pCDMPProfile,
_In_opt_ PPROFILE pCAMPProfile,
_In_opt_ PPROFILE pGMMPProfile,
_In_ DWORD dwDesireAccess,
_In_ DWORD dwShareMode,
_In_ DWORD dwCreationMode,
_In_ DWORD dwFlags
);
HPROFILE WINAPI WcsOpenColorProfileW(
_In_ PPROFILE pCDMPProfile,
_In_opt_ PPROFILE pCAMPProfile,
_In_opt_ PPROFILE pGMMPProfile,
_In_ DWORD dwDesireAccess,
_In_ DWORD dwShareMode,
_In_ DWORD dwCreationMode,
_In_ DWORD dwFlags
);
//
// Flags for WcsCreateIccProfile.
//
// By default, the original WCS profiles used for the conversion are embedded
// in the output ICC profile in a WcsProfilesTag, resulting in an ICC profile
// which is compatible with ICC software, yet still has the original WCS
// profile data available to code which is designed to parse it.
//
// This flag is set to produce an ICC profile without any of the original
// WCS profile data embedded. The WcsProfilesTag will not be present in the
// output profile. This will result in a smaller output profile, however the
// original WCS profile data will not be available to code that would be able
// to parse it instead of the ICC data.
//
//
// These flags should be ORed in with one of the four ICC INTENT_ flags
// Thus, they must use different bits from the INTENT_ flags. Currrently, the INTENT_ flags
// use the values 0-3, or the low order two bits. Hence we use the third lowest bit.
//
#define WCS_DEFAULT 0x00000000L
#define WCS_ICCONLY 0x00010000L
HPROFILE WINAPI WcsCreateIccProfile(
_In_ HPROFILE hWcsProfile,
_In_ DWORD dwOptions
);
//
// ICC TAGTYPE for the embedded Wcs information.
//
#define WCS_EMBEDDED_TAG_SIGNATURE 'MS00'
#define WCS_EMBEDDED_TAG_TYPE_SIGNATURE 'MS10'
#endif // NTDDI_VERSION >= NTDDI_VISTA
#if NTDDI_VERSION >= NTDDI_WIN7
BOOL WINAPI WcsGetCalibrationManagementState (
_Out_ BOOL *pbIsEnabled
);
BOOL WINAPI WcsSetCalibrationManagementState (
_In_ BOOL bIsEnabled
);
#endif // NTDDI_VERSION >= NTDDI_WIN7
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
#pragma endregion
#pragma region Modern Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
//
// APIs and structures for system color state management
//
#if NTDDI_VERSION >= NTDDI_WIN10_RS4
//
// Structures for system color state management
//
#define COLORADAPTER_PROFILE_NAME_MAX_LENGTH 80
//
// A CIE xyY chromaticity point
//
typedef struct XYYPoint
{
float x;
float y;
float Y;
} XYYPoint;
#if _MSC_VER > 1200
#pragma warning(push)
#pragma warning(disable:4201) // nameless struct/union
#endif
//
// WhitePoint
//
// Struct for encapsulating a display whitepoint in various
// ways:
// Chromaticity An xyY point, populate xyY member
// TEMPERATURE A CCT point, populate CCT member
// D65 The standard D65 s[c]RGB whitepoint.
// Set the type enum to the preferred expression type and
// populate the corresponding data entry in the union.
//
typedef struct WhitePoint
{
enum {CHROMATICITY,TEMPERATURE,D65} type;
union
{
XYYPoint xyY;
float CCT;
};
} WhitePoint;
#if _MSC_VER > 1200
#pragma warning(pop)
#endif
//
// DisplayID
//
// Identifier for a particular display, using the DXGK target and
// source IDs. These are obtained through QueryDisplayConfig calls
//
typedef struct DisplayID
{
LUID targetAdapterID;
UINT32 sourceInfoID;
} DisplayID;
//
// DisplayStateID
//
// Holds the current color state IDs for a display. These values will
// change as the system color state changes.
// profileID Identifies the currently set Color Profile
// transformID Identifies the current lookup table transform
// whitepointID Identifies the current target whitepoint
//
typedef struct DisplayStateID
{
UINT32 profileID;
UINT32 transformID;
UINT32 whitepointID;
} DisplayStateID;
//
// DisplayTransformLut
//
// A 16-bit, 3-channel lookup table used to modify system
// colors.
//
typedef struct DisplayTransformLut
{
UINT16 red[256];
UINT16 green[256];
UINT16 blue[256];
} DisplayTransformLut;
HRESULT WINAPI ColorAdapterGetSystemModifyWhitePointCaps(
_Out_ BOOL* whitePointAdjCapable,
_Out_ BOOL* isColorOverrideActive
);
HRESULT WINAPI ColorAdapterUpdateDisplayGamma(
_In_ DisplayID displayID,
_In_ DisplayTransformLut* displayTransform,
_In_ BOOL internal
);
HRESULT WINAPI ColorAdapterUpdateDeviceProfile(
_In_ DisplayID displayID,
_In_ LPWSTR profName
);
HRESULT WINAPI ColorAdapterGetDisplayCurrentStateID(
_In_ DisplayID displayID,
_Out_ DisplayStateID* displayStateID
);
HRESULT WINAPI ColorAdapterGetDisplayTransformData(
_In_ DisplayID displayID,
_Out_ DisplayTransformLut* displayTransformLut,
_Out_ UINT32* transformID
);
HRESULT WINAPI ColorAdapterGetDisplayTargetWhitePoint(
_In_ DisplayID displayID,
_Out_ WhitePoint* wtpt,
_Out_ UINT32* transitionTime,
_Out_ UINT32* whitepointID
);
HRESULT WINAPI ColorAdapterGetDisplayProfile(
_In_ DisplayID displayID,
_Out_writes_(COLORADAPTER_PROFILE_NAME_MAX_LENGTH) LPWSTR displayProfile,
_Out_ UINT32* profileID,
_Out_ BOOL* bUseAccurate
);
HRESULT WINAPI ColorAdapterGetCurrentProfileCalibration(
_In_ DisplayID displayID,
_In_ DWORD maxCalibrationBlobSize,
_Out_ UINT32* blobSize,
_Out_writes_bytes_(*blobSize) BYTE* calibrationBlob
);
HRESULT WINAPI ColorAdapterRegisterOEMColorService(
_Out_ HANDLE* registration
);
HRESULT WINAPI ColorAdapterUnregisterOEMColorService(
_In_ HANDLE registration
);
#endif // NTDDI_VERSION >= NTDDI_WIN10_RS4
#if NTDDI_VERSION >= NTDDI_WIN10_RS5
/*
* Associates a color profile (already installed) with a specified display in the
* given scope.
*
* Parameters:
* profileManagementScope specifies the association as system-wide or user-specific
* profileName identifies the installed profile to associate
* targetAdapterID the target adapter of the display
* sourceID the source identifier of the display
* setAsDefault whether or not to set the newly associated profile as the default
* associateAsAdvancedColor specifies to which association list the new profile is added
*/
HRESULT WINAPI ColorProfileAddDisplayAssociation(
_In_ WCS_PROFILE_MANAGEMENT_SCOPE scope,
_In_ PCWSTR profileName,
_In_ LUID targetAdapterID,
_In_ UINT32 sourceID,
_In_ BOOL setAsDefault,
_In_ BOOL associateAsAdvancedColor
);
/*
* Disassociates a color profile (already installed) from a specified display in the
* given scope.
*
* Parameters:
* profileManagementScope specifies the association as system-wide or user-specific
* profileName identifies the installed profile to associate
* targetAdapterID the target adapter of the display
* sourceID the source identifier of the display
* disassociateAdvancedColor specifies if the association to be removed is Advanced Color
*/
HRESULT WINAPI ColorProfileRemoveDisplayAssociation(
_In_ WCS_PROFILE_MANAGEMENT_SCOPE scope,
_In_ PCWSTR profileName,
_In_ LUID targetAdapterID,
_In_ UINT32 sourceID,
_In_ BOOL dissociateAdvancedColor
);
/*
* Sets a given profile (already installed) as the default profile for a specified display in the
* given scope.
*
* Parameters:
* profileManagementScope specifies the association as system-wide or user-specific
* profileName identifies the installed profile to associate
* profileType the color profile type (right now will only accept CPT_ICC)
* profileSubtype the color profile subtype to return
* targetAdapterID the target adapter of the display
* sourceID the source identifier of the display
*/
HRESULT WINAPI ColorProfileSetDisplayDefaultAssociation(
_In_ WCS_PROFILE_MANAGEMENT_SCOPE scope,
_In_ PCWSTR profileName,
_In_ COLORPROFILETYPE profileType,
_In_ COLORPROFILESUBTYPE profileSubType,
_In_ LUID targetAdapterID,
_In_ UINT32 sourceID
);
/*
* Retrieves list of profiles associated with a given display in the specified scope
*
* Parameters:
* scope specifies the association as system-wide or user-specific
* targetAdapterID the target adapter of the display
* sourceID the source identifier of the display
* profileList pointer to a buffer where the profile names are placed, must be freed with
* LocalFree
* profileCount receives the number of profiles names copied into profileList
*/
HRESULT WINAPI ColorProfileGetDisplayList(
_In_ WCS_PROFILE_MANAGEMENT_SCOPE scope,
_In_ LUID targetAdapterID,
_In_ UINT32 sourceID,
_Outptr_ LPWSTR** profileList,
_Out_ PDWORD profileCount
);
/*
* Gets the default color profile for a given display in the specified scope
*
* Parameters:
* scope specifies the association as system-wide or user-specific
* targetAdapterID the target adapter of the display
* sourceID the source identifier of the display
* profileType the color profile type to return (currently only CPT_ICC is supported)
* profileSubType the color profile subtype to return
* profileName on output will have the default color profile name, must be freed with
* LocalFree
*/
HRESULT WINAPI ColorProfileGetDisplayDefault(
_In_ WCS_PROFILE_MANAGEMENT_SCOPE scope,
_In_ LUID targetAdapterID,
_In_ UINT32 sourceID,
_In_ COLORPROFILETYPE profileType,
_In_ COLORPROFILESUBTYPE profileSubType,
_Outptr_ LPWSTR* profileName
);
/*
* Gets the currently selected color profile scope of the provided display - either user or system
*
* Parameters:
* targetAdapterID the target adapter of the display
* sourceID the source identifier of the display
* scope on output will specify if the display's scope is user or system
*/
HRESULT WINAPI ColorProfileGetDisplayUserScope(
_In_ LUID targetAdapterID,
_In_ UINT32 sourceID,
_Out_ WCS_PROFILE_MANAGEMENT_SCOPE *scope
);
#endif // NTDDI_VERSION >= NTDDI_WIN10_RS5
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */
#pragma endregion
#ifdef __cplusplus
}
#endif
#endif // ifndef _ICM_H_