mirror of https://github.com/UMSKT/xpmgr.git
1317 lines
45 KiB
C
1317 lines
45 KiB
C
/*++
|
|
|
|
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
|
|
|
|
#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,
|
|
|
|
} COLORPROFILESUBTYPE;
|
|
typedef COLORPROFILESUBTYPE *PCOLORPROFILESUBTYPE, *LPCOLORPROFILESUBTYPE;
|
|
|
|
//
|
|
// 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
|
|
|
|
#if NTDDI_VERSION >= NTDDI_VISTA
|
|
|
|
//
|
|
// 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 // 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_bcount_opt(*pcbProfile) PBYTE pProfile, __inout PDWORD pcbProfile);
|
|
BOOL WINAPI IsColorProfileValid(__in HPROFILE hProfile, __out PBOOL pbValid);
|
|
BOOL WINAPI CreateProfileFromLogColorSpaceA(__in LPLOGCOLORSPACEA pLogColorSpace, __deref_out_xcount(GlobalSize(*pProfile)) PBYTE* pProfile);
|
|
BOOL WINAPI CreateProfileFromLogColorSpaceW(__in LPLOGCOLORSPACEW pLogColorSpace, __deref_out_xcount(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_bcount_opt(*pcbElement) PVOID pElement, __out PBOOL pbReference);
|
|
BOOL WINAPI SetColorProfileHeader(__in HPROFILE hProfile, __in_bcount(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_ecount(*pcbElement) PVOID pElement);
|
|
BOOL WINAPI SetColorProfileElementReference(__in HPROFILE hProfile, TAGTYPE newTag, TAGTYPE refTag);
|
|
BOOL WINAPI GetPS2ColorSpaceArray(__in HPROFILE hProfile, DWORD dwIntent, DWORD dwCSAType, __out_bcount_opt(*pcbPS2ColorSpaceArray) PBYTE pPS2ColorSpaceArray, __inout PDWORD pcbPS2ColorSpaceArray, __out PBOOL pbBinary);
|
|
BOOL WINAPI GetPS2ColorRenderingIntent(__in HPROFILE hProfile, DWORD dwIntent, __out_bcount_opt(*pcbPS2ColorRenderingIntent) PBYTE pBuffer, __inout PDWORD pcbPS2ColorRenderingIntent);
|
|
BOOL WINAPI GetPS2ColorRenderingDictionary(__in HPROFILE hProfile, DWORD dwIntent, __out_bcount_opt(*pcbPS2ColorRenderingDictionary) PBYTE pPS2ColorRenderingDictionary, __inout PDWORD pcbPS2ColorRenderingDictionary, __inout PBOOL pbBinary);
|
|
BOOL WINAPI GetNamedProfileInfo(__in HPROFILE hProfile, __inout_bcount(sizeof(NAMED_PROFILE_INFO)) PNAMED_PROFILE_INFO pNamedProfileInfo);
|
|
BOOL WINAPI ConvertColorNameToIndex(__in HPROFILE hProfile, __in_ecount(dwCount) PCOLOR_NAME paColorName, __out_ecount(dwCount) PDWORD paIndex, DWORD dwCount);
|
|
BOOL WINAPI ConvertIndexToColorName(__in HPROFILE hProfile, __in_ecount(dwCount) PDWORD paIndex, __out_ecount(dwCount) PCOLOR_NAME paColorName, DWORD dwCount);
|
|
BOOL WINAPI CreateDeviceLinkProfile(__in_ecount(nProfiles) PHPROFILE hProfile, DWORD nProfiles, __in_ecount(nIntents) PDWORD padwIntent, DWORD nIntents, DWORD dwFlags, __deref_out_xcount(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_ecount(nProfiles) PHPROFILE pahProfiles, DWORD nProfiles, __in_ecount(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_ecount(dwWidth * dwHeight) PBYTE paResult, __in_opt __callback PBMCALLBACKFN pfnCallback, __in_opt LPARAM lpCallbackData);
|
|
BOOL WINAPI TranslateColors(__in HTRANSFORM hColorTransform, __in_ecount(nColors) PCOLOR paInputColors, DWORD nColors, COLORTYPE ctInput, __out_ecount(nColors) PCOLOR paOutputColors, COLORTYPE ctOutput);
|
|
BOOL WINAPI CheckColors(__in HTRANSFORM hColorTransform, __in_ecount(nColors) PCOLOR paInputColors, DWORD nColors, COLORTYPE ctInput, __out_ecount(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_bcount_part_opt(*pdwSize, *pdwSize) PSTR pBuffer,
|
|
__inout PDWORD pdwSize
|
|
);
|
|
|
|
BOOL
|
|
WINAPI
|
|
GetColorDirectoryW(
|
|
__in_opt PCWSTR pMachineName,
|
|
__out_bcount_part_opt(*pdwSize, *pdwSize) PWSTR pBuffer,
|
|
__inout PDWORD pdwSize
|
|
);
|
|
|
|
|
|
BOOL WINAPI InstallColorProfileA(__in_opt PCSTR pMachineName, __in PCSTR pProfileName);
|
|
BOOL WINAPI InstallColorProfileW(__in_opt PCWSTR pMachineName, __in PCWSTR pProfileName);
|
|
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_bcount_opt(*pdwSizeOfEnumerationBuffer) PBYTE pEnumerationBuffer, __inout PDWORD pdwSizeOfEnumerationBuffer, __out_opt PDWORD pnProfiles);
|
|
BOOL WINAPI EnumColorProfilesW(__in_opt PCWSTR pMachineName, __in PENUMTYPEW pEnumRecord, __out_bcount_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);
|
|
|
|
BOOL
|
|
WINAPI
|
|
GetStandardColorSpaceProfileA(
|
|
__in_opt PCSTR pMachineName,
|
|
__in DWORD dwSCS,
|
|
__out_bcount_part_opt(*pcbSize, *pcbSize) PSTR pBuffer,
|
|
__inout PDWORD pcbSize
|
|
);
|
|
|
|
BOOL
|
|
WINAPI
|
|
GetStandardColorSpaceProfileW(
|
|
__in_opt PCWSTR pMachineName,
|
|
__in DWORD dwSCS,
|
|
__out_bcount_part_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_bcount(sizeof(COLORMATCHSETUPW)) PCOLORMATCHSETUPW pcms);
|
|
BOOL WINAPI SetupColorMatchingA(__inout_bcount(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_bcount(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_bcount(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_bcount(cbInput) PVOID pInputData,
|
|
__in DWORD nOutputChannels,
|
|
__in COLORDATATYPE cdtOutput,
|
|
__in DWORD cbOutput,
|
|
__out_bcount(cbOutput) PVOID pOutputData
|
|
);
|
|
|
|
BOOL
|
|
WINAPI
|
|
WcsCheckColors(
|
|
__in HTRANSFORM hColorTransform,
|
|
__in DWORD nColors,
|
|
__in DWORD nInputChannels,
|
|
__in COLORDATATYPE cdtInput,
|
|
__in DWORD cbInput,
|
|
__in_bcount(cbInput) PVOID pInputData,
|
|
__out_ecount(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 InstallColorProfile InstallColorProfileW
|
|
#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 InstallColorProfile InstallColorProfileA
|
|
#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_ecount(nColors) LPCOLOR lpaInputColors, // array of COLORs
|
|
DWORD nColors, // COLOR array size
|
|
COLORTYPE ctInput, // input color type
|
|
__out_ecount(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_ecount(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_ecount(dwCount) PCOLOR_NAME paColorName,
|
|
__out_ecount(dwCount) PDWORD paIndex,
|
|
DWORD dwCount
|
|
);
|
|
|
|
BOOL WINAPI CMConvertIndexToColorName(
|
|
__in HPROFILE hProfile,
|
|
__in_ecount(dwCount) PDWORD paIndex,
|
|
__out_ecount(dwCount) PCOLOR_NAME paColorName,
|
|
DWORD dwCount
|
|
);
|
|
|
|
BOOL WINAPI CMCreateDeviceLinkProfile(
|
|
__in_ecount(nProfiles) PHPROFILE pahProfiles, // array of profile handles
|
|
DWORD nProfiles, // profile handle array size
|
|
__in_ecount(nIntents) PDWORD padwIntents, // array of rendering intents
|
|
DWORD nIntents, // intent array size
|
|
DWORD dwFlags, // transform creation flags
|
|
__deref_out_xcount(GlobalSize(*lpProfileData)) LPBYTE *lpProfileData // pointer to pointer to buffer
|
|
);
|
|
|
|
HCMTRANSFORM WINAPI CMCreateMultiProfileTransform(
|
|
__in_ecount(nProfiles) PHPROFILE pahProfiles, // array of profile handles
|
|
DWORD nProfiles, // profile handle array size
|
|
__in_ecount(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_ecount(nCount) RGBTRIPLE *lpaRGBTriple, // RGB triple array
|
|
__out_bcount(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_bcount_opt(*lpcbSize) LPBYTE lpBuffer,
|
|
__inout LPDWORD lpcbSize,
|
|
__inout LPBOOL lpbBinary
|
|
);
|
|
|
|
BOOL WINAPI CMGetPS2ColorRenderingIntent(
|
|
__in HPROFILE hProfile,
|
|
DWORD dwIntent,
|
|
__out_bcount_opt(*lpcbSize) LPBYTE lpBuffer,
|
|
__inout LPDWORD lpcbSize
|
|
);
|
|
|
|
BOOL WINAPI CMGetPS2ColorSpaceArray(
|
|
__in HPROFILE hProfile,
|
|
DWORD dwIntent,
|
|
DWORD dwCSAType,
|
|
__out_bcount_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_ecount(nColors) LPCOLOR lpaInputColors, // pointer to input color array
|
|
DWORD nColors, // number of color in color array
|
|
COLORTYPE ctInput, // input color type
|
|
__out_ecount(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 WcsGetCalibrationManagementState (
|
|
__out BOOL *pbIsEnabled
|
|
);
|
|
|
|
BOOL WcsSetCalibrationManagementState (
|
|
__in BOOL bIsEnabled
|
|
);
|
|
|
|
#endif // NTDDI_VERSION >= NTDDI_WIN7
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // ifndef _ICM_H_
|
|
|
|
|