|
|
/*++
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 upto 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]; };
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;
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;
//
// 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,
} 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'
//
// 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 attributes bitfield values
//
#define ATTRIB_TRANSPARENCY 0x00000001
#define ATTRIB_MATTE 0x00000002
//
// 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
//
// 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
//
// 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
#define RESERVED 0x80000000
//
// Paremeter 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(PPROFILE, DWORD, DWORD, DWORD); HPROFILE WINAPI OpenColorProfileW(PPROFILE, DWORD, DWORD, DWORD); BOOL WINAPI CloseColorProfile(HPROFILE); BOOL WINAPI GetColorProfileFromHandle(HPROFILE, PBYTE, PDWORD); BOOL WINAPI IsColorProfileValid(HPROFILE, PBOOL); BOOL WINAPI CreateProfileFromLogColorSpaceA(LPLOGCOLORSPACEA, PBYTE*); BOOL WINAPI CreateProfileFromLogColorSpaceW(LPLOGCOLORSPACEW, PBYTE*); BOOL WINAPI GetCountColorProfileElements(HPROFILE, PDWORD); BOOL WINAPI GetColorProfileHeader(HPROFILE, PPROFILEHEADER); BOOL WINAPI GetColorProfileElementTag(HPROFILE, DWORD, PTAGTYPE); BOOL WINAPI IsColorProfileTagPresent(HPROFILE, TAGTYPE, PBOOL); BOOL WINAPI GetColorProfileElement(HPROFILE, TAGTYPE, DWORD, PDWORD, PVOID, PBOOL); BOOL WINAPI SetColorProfileHeader(HPROFILE, PPROFILEHEADER); BOOL WINAPI SetColorProfileElementSize(HPROFILE, TAGTYPE, DWORD); BOOL WINAPI SetColorProfileElement(HPROFILE, TAGTYPE, DWORD, PDWORD, PVOID); BOOL WINAPI SetColorProfileElementReference(HPROFILE, TAGTYPE, TAGTYPE); BOOL WINAPI GetPS2ColorSpaceArray (HPROFILE, DWORD, DWORD, PBYTE, PDWORD, PBOOL); BOOL WINAPI GetPS2ColorRenderingIntent(HPROFILE, DWORD, PBYTE, PDWORD); BOOL WINAPI GetPS2ColorRenderingDictionary(HPROFILE, DWORD, PBYTE, PDWORD, PBOOL); BOOL WINAPI GetNamedProfileInfo(HPROFILE, PNAMED_PROFILE_INFO); BOOL WINAPI ConvertColorNameToIndex(HPROFILE, PCOLOR_NAME, PDWORD, DWORD); BOOL WINAPI ConvertIndexToColorName(HPROFILE, PDWORD, PCOLOR_NAME, DWORD); BOOL WINAPI CreateDeviceLinkProfile(PHPROFILE, DWORD, PDWORD, DWORD, DWORD, PBYTE*, DWORD); HTRANSFORM WINAPI CreateColorTransformA(LPLOGCOLORSPACEA, HPROFILE, HPROFILE, DWORD); HTRANSFORM WINAPI CreateColorTransformW(LPLOGCOLORSPACEW, HPROFILE, HPROFILE, DWORD); HTRANSFORM WINAPI CreateMultiProfileTransform(PHPROFILE, DWORD, PDWORD, DWORD, DWORD, DWORD); BOOL WINAPI DeleteColorTransform(HTRANSFORM); BOOL WINAPI TranslateBitmapBits(HTRANSFORM, PVOID, BMFORMAT, DWORD, DWORD, DWORD, PVOID, BMFORMAT, DWORD, PBMCALLBACKFN, LPARAM); BOOL WINAPI CheckBitmapBits(HTRANSFORM , PVOID, BMFORMAT, DWORD, DWORD, DWORD, PBYTE, PBMCALLBACKFN, LPARAM); BOOL WINAPI TranslateColors(HTRANSFORM, PCOLOR, DWORD, COLORTYPE, PCOLOR, COLORTYPE); BOOL WINAPI CheckColors(HTRANSFORM, PCOLOR, DWORD, COLORTYPE, PBYTE); DWORD WINAPI GetCMMInfo(HTRANSFORM, DWORD); BOOL WINAPI RegisterCMMA(PCSTR, DWORD, PCSTR); BOOL WINAPI RegisterCMMW(PCWSTR, DWORD, PCWSTR); BOOL WINAPI UnregisterCMMA(PCSTR, DWORD); BOOL WINAPI UnregisterCMMW(PCWSTR, DWORD); BOOL WINAPI SelectCMM(DWORD); BOOL WINAPI GetColorDirectoryA(PCSTR, PSTR, PDWORD); BOOL WINAPI GetColorDirectoryW(PCWSTR, PWSTR, PDWORD); BOOL WINAPI InstallColorProfileA(PCSTR, PCSTR); BOOL WINAPI InstallColorProfileW(PCWSTR, PCWSTR); BOOL WINAPI UninstallColorProfileA(PCSTR, PCSTR, BOOL); BOOL WINAPI UninstallColorProfileW(PCWSTR, PCWSTR, BOOL); BOOL WINAPI EnumColorProfilesA(PCSTR, PENUMTYPEA, PBYTE, PDWORD, PDWORD); BOOL WINAPI EnumColorProfilesW(PCWSTR, PENUMTYPEW, PBYTE, PDWORD, PDWORD); BOOL WINAPI SetStandardColorSpaceProfileA(PCSTR, DWORD, PCSTR); BOOL WINAPI SetStandardColorSpaceProfileW(PCWSTR, DWORD, PCWSTR); BOOL WINAPI GetStandardColorSpaceProfileA(PCSTR, DWORD, PSTR, PDWORD); BOOL WINAPI GetStandardColorSpaceProfileW(PCWSTR, DWORD, PWSTR, PDWORD); BOOL WINAPI AssociateColorProfileWithDeviceA(PCSTR, PCSTR, PCSTR); BOOL WINAPI AssociateColorProfileWithDeviceW(PCWSTR, PCWSTR, PCWSTR); BOOL WINAPI DisassociateColorProfileFromDeviceA(PCSTR, PCSTR, PCSTR); BOOL WINAPI DisassociateColorProfileFromDeviceW(PCWSTR, PCWSTR, PCWSTR); BOOL WINAPI SetupColorMatchingW(PCOLORMATCHSETUPW pcms); BOOL WINAPI SetupColorMatchingA(PCOLORMATCHSETUPA pcms);
#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
#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
#endif // !UNICODE
//
// Transform returned by CMM
//
typedef HANDLE HCMTRANSFORM;
//
// Pointer to ICC color profile data.
//
typedef PVOID LPDEVCHARACTER;
//
// CMM API definition
//
BOOL WINAPI CMCheckColors( HCMTRANSFORM hcmTransform, // transform handle
LPCOLOR lpaInputColors, // array of COLORs
DWORD nColors, // COLOR array size
COLORTYPE ctInput, // input color type
LPBYTE lpaResult // buffer for results
);
BOOL WINAPI CMCheckColorsInGamut( HCMTRANSFORM hcmTransform, // transform handle
RGBTRIPLE *lpaRGBTriple, // RGB triple array
LPBYTE lpaResult, // buffer for results
UINT nCount // result buffer size
);
BOOL WINAPI CMCheckRGBs( HCMTRANSFORM hcmTransform, // transform handle
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
LPBYTE lpaResult, // buffer for results
PBMCALLBACKFN pfnCallback, // pointer to callback function
LPARAM ulCallbackData // caller-defined parameter to callback
);
BOOL WINAPI CMConvertColorNameToIndex( HPROFILE hProfile, PCOLOR_NAME paColorName, PDWORD paIndex, DWORD dwCount );
BOOL WINAPI CMConvertIndexToColorName( HPROFILE hProfile, PDWORD paIndex, PCOLOR_NAME paColorName, DWORD dwCount );
BOOL WINAPI CMCreateDeviceLinkProfile( PHPROFILE pahProfiles, // array of profile handles
DWORD nProfiles, // profile handle array size
PDWORD padwIntents, // array of rendering intents
DWORD nIntents, // intent array size
DWORD dwFlags, // transform creation flags
LPBYTE *lpProfileData // pointer to pointer to buffer
);
HCMTRANSFORM WINAPI CMCreateMultiProfileTransform( PHPROFILE pahProfiles, // array of profile handles
DWORD nProfiles, // profile handle array size
PDWORD padwIntents, // array of rendering intents
DWORD nIntents, // intent array size
DWORD dwFlags // transform creation flags
);
BOOL WINAPI CMCreateProfile( LPLOGCOLORSPACEA lpColorSpace, // pointer to a logical color space
LPDEVCHARACTER *lpProfileData // pointer to pointer to buffer
);
BOOL WINAPI CMCreateProfileW( LPLOGCOLORSPACEW lpColorSpace, // pointer to a logical color space
LPDEVCHARACTER *lpProfileData // pointer to pointer to buffer
);
HCMTRANSFORM WINAPI CMCreateTransform( LPLOGCOLORSPACEA lpColorSpace, // pointer to logical color space
LPDEVCHARACTER lpDevCharacter, // profile data
LPDEVCHARACTER lpTargetDevCharacter // target profile data
);
HCMTRANSFORM WINAPI CMCreateTransformW( LPLOGCOLORSPACEW lpColorSpace, // pointer to logical color space
LPDEVCHARACTER lpDevCharacter, // profile data
LPDEVCHARACTER lpTargetDevCharacter // target profile data
);
HCMTRANSFORM WINAPI CMCreateTransformExt( LPLOGCOLORSPACEA lpColorSpace, // pointer to logical color space
LPDEVCHARACTER lpDevCharacter, // profile data
LPDEVCHARACTER lpTargetDevCharacter, // target profile data
DWORD dwFlags // creation flags
);
HCMTRANSFORM WINAPI CMCreateTransformExtW( LPLOGCOLORSPACEW lpColorSpace, // pointer to logical color space
LPDEVCHARACTER lpDevCharacter, // profile data
LPDEVCHARACTER lpTargetDevCharacter, // target profile data
DWORD dwFlags // creation flags
);
BOOL WINAPI CMDeleteTransform( HCMTRANSFORM hcmTransform // transform handle to be deleted.
);
DWORD WINAPI CMGetInfo( DWORD dwInfo );
BOOL WINAPI CMGetNamedProfileInfo( HPROFILE hProfile, // profile handle
PNAMED_PROFILE_INFO pNamedProfileInfo // pointer to named profile info
);
BOOL WINAPI CMGetPS2ColorRenderingDictionary( HPROFILE hProfile, DWORD dwIntent, LPBYTE lpBuffer, LPDWORD lpcbSize, LPBOOL lpbBinary );
BOOL WINAPI CMGetPS2ColorRenderingIntent( HPROFILE hProfile, DWORD dwIntent, LPBYTE lpBuffer, LPDWORD lpcbSize );
BOOL WINAPI CMGetPS2ColorSpaceArray( HPROFILE hProfile, DWORD dwIntent, DWORD dwCSAType, LPBYTE lpBuffer, LPDWORD lpcbSize, LPBOOL lpbBinary );
BOOL WINAPI CMIsProfileValid( HPROFILE hProfile, // proflle handle
LPBOOL lpbValid // buffer for result.
);
BOOL WINAPI CMTranslateColors( HCMTRANSFORM hcmTransform, // transform handle
LPCOLOR lpaInputColors, // pointer to input color array
DWORD nColors, // number of color in color array
COLORTYPE ctInput, // input color type
LPCOLOR lpaOutputColors, // pointer to output color array
COLORTYPE ctOutput // output color type
);
BOOL WINAPI CMTranslateRGB( HCMTRANSFORM hcmTransform, COLORREF ColorRef, LPCOLORREF lpColorRef, DWORD dwFlags );
BOOL WINAPI CMTranslateRGBs( HCMTRANSFORM hcmTransform, LPVOID lpSrcBits, BMFORMAT bmInput, DWORD dwWidth, DWORD dwHeight, DWORD dwStride, LPVOID lpDestBits, BMFORMAT bmOutput, DWORD dwTranslateDirection );
BOOL WINAPI CMTranslateRGBsExt( HCMTRANSFORM hcmTransform, LPVOID lpSrcBits, BMFORMAT bmInput, DWORD dwWidth, DWORD dwHeight, DWORD dwInputStride, LPVOID lpDestBits, BMFORMAT bmOutput, DWORD dwOutputStride, LPBMCALLBACKFN lpfnCallback, LPARAM ulCallbackData );
#ifdef __cplusplus
} #endif
#endif // ifndef _ICM_H_
|