You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1046 lines
26 KiB
1046 lines
26 KiB
/******************************Module*Header*******************************\
|
|
* Module Name: gdiicm *
|
|
* *
|
|
* Definitions needed for client side objects. *
|
|
* *
|
|
* Copyright (c) 1993-1999 Microsoft Corporation *
|
|
\**************************************************************************/
|
|
|
|
//
|
|
// ICM
|
|
//
|
|
#if DBG
|
|
#define DBG_ICM 1
|
|
#else
|
|
#define DBG_ICM 0
|
|
#endif
|
|
|
|
#if DBG_ICM
|
|
|
|
#define DBG_ICM_API 0x00000001
|
|
#define DBG_ICM_WRN 0x00000002
|
|
#define DBG_ICM_MSG 0x00000004
|
|
#define DBG_ICM_COMPATIBLEDC 0x00000008
|
|
#define DBG_ICM_METAFILE 0x00000010
|
|
|
|
extern ULONG DbgIcm;
|
|
|
|
//
|
|
// trace APIs
|
|
//
|
|
|
|
#define ICMAPI(s) \
|
|
if (DbgIcm & DBG_ICM_API) \
|
|
{ \
|
|
DbgPrint ## s; \
|
|
}
|
|
|
|
#define ICMMSG(s) \
|
|
if (DbgIcm & DBG_ICM_MSG) \
|
|
{ \
|
|
DbgPrint ## s; \
|
|
}
|
|
|
|
#define ICMWRN(s) \
|
|
if (DbgIcm & DBG_ICM_WRN) \
|
|
{ \
|
|
DbgPrint ## s; \
|
|
}
|
|
|
|
#else
|
|
|
|
#define ICMAPI(s)
|
|
#define ICMMSG(s)
|
|
#define ICMWRN(s)
|
|
|
|
#endif
|
|
|
|
#define LOAD_ICMDLL(errCode) if ((ghICM == NULL) && (!IcmInitialize())) { \
|
|
WARNING("gdi32: Can't load mscms.dll\n"); \
|
|
return((errCode)); \
|
|
}
|
|
|
|
//
|
|
// The direction of color transform
|
|
//
|
|
#define ICM_FORWARD 0x0001
|
|
#define ICM_BACKWARD 0x0002
|
|
|
|
//
|
|
// Default intents
|
|
//
|
|
#define LCS_DEFAULT_INTENT LCS_GM_IMAGES
|
|
#define DM_DEFAULT_INTENT DMICM_CONTRAST
|
|
|
|
typedef struct _PROFILECALLBACK_DATA
|
|
{
|
|
PWSTR pwszFileName;
|
|
BOOL bFound;
|
|
} PROFILECALLBACK_DATA, *PPROFILECALLBACK_DATA;
|
|
|
|
//
|
|
// The flags for DIB_TRANSLATE_INFO.TranslateType
|
|
//
|
|
#define TRANSLATE_BITMAP 0x0001
|
|
#define TRANSLATE_HEADER 0x0002
|
|
|
|
typedef struct _DIB_TRANSLATE_INFO
|
|
{
|
|
ULONG TranslateType;
|
|
BMFORMAT SourceColorType;
|
|
BMFORMAT TranslateColorType;
|
|
ULONG SourceWidth;
|
|
ULONG SourceHeight;
|
|
ULONG SourceBitCount;
|
|
LPBITMAPINFO TranslateBitmapInfo;
|
|
ULONG TranslateBitmapInfoSize;
|
|
PVOID pvSourceBits;
|
|
ULONG cjSourceBits;
|
|
PVOID pvTranslateBits;
|
|
ULONG cjTranslateBits;
|
|
} DIB_TRANSLATE_INFO, *PDIB_TRANSLATE_INFO;
|
|
|
|
//
|
|
// Cached Color Space Structure
|
|
//
|
|
typedef struct _CACHED_COLORSPACE
|
|
{
|
|
LIST_ENTRY ListEntry;
|
|
HGDIOBJ hObj;
|
|
FLONG flInfo;
|
|
ULONG cRef;
|
|
HPROFILE hProfile;
|
|
DWORD ColorIntent;
|
|
BMFORMAT ColorFormat;
|
|
PROFILE ColorProfile;
|
|
LOGCOLORSPACEW LogColorSpace;
|
|
} CACHED_COLORSPACE, *PCACHED_COLORSPACE;
|
|
|
|
//
|
|
// CACHED_COLORSPACE.flInfo
|
|
//
|
|
#define HGDIOBJ_SPECIFIC_COLORSPACE 0x010000
|
|
#define NOT_CACHEABLE_COLORSPACE 0x020000
|
|
#define NEED_TO_FREE_PROFILE 0x040000 // ColorProfile.pProfileData must be GlobalFree()
|
|
#define NEED_TO_DEL_PROFILE 0x080000
|
|
#define NEED_TO_DEL_PROFILE_WITH_HOBJ 0x100000
|
|
#define ON_MEMORY_PROFILE 0x200000
|
|
|
|
#define DEVICE_CALIBRATE_COLORSPACE 0x000001 // Enable "DeviceColorCalibration" during halftoning
|
|
#define METAFILE_COLORSPACE (0x000002 | HGDIOBJ_SPECIFIC_COLORSPACE) // DC (metafile)
|
|
#define DRIVER_COLORSPACE (0x000004 | HGDIOBJ_SPECIFIC_COLORSPACE) // DC (source)
|
|
#define DIBSECTION_COLORSPACE (0x000010 | HGDIOBJ_SPECIFIC_COLORSPACE) // DIBSection
|
|
|
|
#define GET_COLORSPACE_TYPE(x) ((x) & 0x000FFF)
|
|
|
|
//
|
|
// Cached Color Transform Structure
|
|
//
|
|
typedef struct _CACHED_COLORTRANSFORM
|
|
{
|
|
LIST_ENTRY ListEntry;
|
|
FLONG flInfo;
|
|
HDC hdc;
|
|
ULONG cRef;
|
|
HANDLE ColorTransform;
|
|
PCACHED_COLORSPACE SourceColorSpace;
|
|
PCACHED_COLORSPACE DestinationColorSpace;
|
|
PCACHED_COLORSPACE TargetColorSpace;
|
|
} CACHED_COLORTRANSFORM, *PCACHED_COLORTRANSFORM;
|
|
|
|
//
|
|
// CACHED_COLORTRANSFORM.flInfo
|
|
//
|
|
#define DEVICE_COLORTRANSFORM 0x0004
|
|
#define CACHEABLE_COLORTRANSFORM 0x0010
|
|
|
|
//
|
|
// Matafiled ICC profile
|
|
//
|
|
typedef struct _MATAFILE_COLORPROFILE
|
|
{
|
|
LIST_ENTRY ListEntry;
|
|
WCHAR ColorProfile[MAX_PATH];
|
|
} METAFILE_COLORPROFILE, *PMETAFILE_COLORPROFILE;
|
|
|
|
#define IDENT_COLORTRANSFORM ((PCACHED_COLORTRANSFORM)-1)
|
|
|
|
//
|
|
// Saved ICMINFO for SaveDC and RestoreDC API.
|
|
//
|
|
typedef struct _SAVED_ICMINFO
|
|
{
|
|
LIST_ENTRY ListEntry;
|
|
DWORD dwSavedDepth; // Saved depth
|
|
PCACHED_COLORSPACE pSourceColorSpace; // Pointer to source profile data
|
|
PCACHED_COLORSPACE pDestColorSpace; // Pointer to destination profile data
|
|
PCACHED_COLORSPACE pTargetColorSpace; // Pointer to target profile data
|
|
PCACHED_COLORTRANSFORM pCXform; // Pointer to color transform
|
|
PCACHED_COLORTRANSFORM pBackCXform; // Pointer to Backward color transform for GetXXX API
|
|
PCACHED_COLORTRANSFORM pProofCXform; // Pointer to Proofing color transform for ColorMatchToTarget()
|
|
} SAVED_ICMINFO, *PSAVED_ICMINFO;
|
|
|
|
//
|
|
// ICM related info associated to DC.
|
|
//
|
|
typedef struct _GDI_ICMINFO
|
|
{
|
|
LIST_ENTRY ListEntry;
|
|
HDC hdc; // hdc who owns this ICM info.
|
|
PVOID pvdcattr; // pointer to dcattr
|
|
FLONG flInfo; // Flags
|
|
PCACHED_COLORSPACE pSourceColorSpace; // Pointer to source profile data
|
|
PCACHED_COLORSPACE pDestColorSpace; // Pointer to destination profile data
|
|
PCACHED_COLORSPACE pTargetColorSpace; // Pointer to target profile data
|
|
PCACHED_COLORTRANSFORM pCXform; // Pointer to color transform
|
|
PCACHED_COLORTRANSFORM pBackCXform; // Pointer to Backward color transform for GetXXX API
|
|
PCACHED_COLORTRANSFORM pProofCXform; // Pointer to Proofing color transform for ColorMatchToTarget()
|
|
HCOLORSPACE hDefaultSrcColorSpace; // Handle (kernel-mode) to default source color space
|
|
DWORD dwDefaultIntent; // default intent in LOGCOLORSPACE
|
|
LIST_ENTRY SavedIcmInfo; // Saved ICMINFO for SaveDC and RestoreDC API
|
|
WCHAR DefaultDstProfile[MAX_PATH]; // DC's default source color profile
|
|
} GDI_ICMINFO, *PGDI_ICMINFO;
|
|
|
|
//
|
|
// GDI_ICMINFO.flInfo
|
|
//
|
|
#define ICM_VALID_DEFAULT_PROFILE 0x0001
|
|
#define ICM_VALID_CURRENT_PROFILE 0x0002
|
|
#define ICM_DELETE_SOURCE_COLORSPACE 0x0004
|
|
#define ICM_ON_ICMINFO_LIST 0x0008
|
|
#define ICM_UNDER_INITIALIZING 0x0010
|
|
#define ICM_UNDER_CHANGING 0x0020
|
|
#define ICM_IN_USE (ICM_UNDER_INITIALIZING|ICM_UNDER_CHANGING)
|
|
|
|
//
|
|
// PGDI_ICMINFO INIT_ICMINFO(hdc,pdcattr)
|
|
//
|
|
#define INIT_ICMINFO(hdc,pdcattr) (IcmInitIcmInfo((hdc),(pdcattr)))
|
|
|
|
//
|
|
// PGDI_ICMINFO GET_ICMINFO(PDC_ATTR)
|
|
//
|
|
#define GET_ICMINFO(pdcattr) ((PGDI_ICMINFO)((pdcattr)->pvICM))
|
|
|
|
//
|
|
// BOOL BEXIST_ICMINFO(PDC_ATTR)
|
|
//
|
|
#define BEXIST_ICMINFO(pdcattr) (((pdcattr)->pvICM != NULL) ? TRUE : FALSE)
|
|
|
|
//
|
|
// BOOL bNeedTranslateColor(PDC_ATTR)
|
|
//
|
|
#define bNeedTranslateColor(pdcattr) \
|
|
(IS_ICM_HOST(pdcattr->lIcmMode) && \
|
|
(!IS_ICM_LAZY_CORRECTION(pdcattr->lIcmMode)) && \
|
|
(pdcattr->hcmXform != NULL))
|
|
|
|
//
|
|
// VOID IcmMarkInUseIcmInfo(PGDI_ICMINFO,BOOL)
|
|
//
|
|
#define IcmMarkInUseIcmInfo(pIcmInfo,bInUse) \
|
|
ENTERCRITICALSECTION(&semListIcmInfo); \
|
|
if ((bInUse)) \
|
|
(pIcmInfo)->flInfo |= ICM_UNDER_CHANGING; \
|
|
else \
|
|
(pIcmInfo)->flInfo &= ~ICM_UNDER_CHANGING; \
|
|
LEAVECRITICALSECTION(&semListIcmInfo);
|
|
|
|
//
|
|
// Functions exports from MSCMS.DLL
|
|
//
|
|
|
|
//
|
|
// HPROFILE
|
|
// OpenColorProfile(
|
|
// PROFILE pProfile,
|
|
// DWORD dwDesiredAccess,
|
|
// DWORD dwShareMode,
|
|
// DWORD dwCreationMode
|
|
// );
|
|
//
|
|
typedef HPROFILE (FAR WINAPI * FPOPENCOLORPROFILEA)(PPROFILE, DWORD, DWORD, DWORD);
|
|
typedef HPROFILE (FAR WINAPI * FPOPENCOLORPROFILEW)(PPROFILE, DWORD, DWORD, DWORD);
|
|
|
|
//
|
|
// BOOL
|
|
// CloseColorProfile(
|
|
// HPROFILE hProfile
|
|
// );
|
|
//
|
|
typedef BOOL (FAR WINAPI * FPCLOSECOLORPROFILE)(HPROFILE);
|
|
|
|
//
|
|
// BOOL
|
|
// IsColorProfileValid(
|
|
// HPROFILE hProfile
|
|
// );
|
|
//
|
|
typedef BOOL (FAR WINAPI * FPISCOLORPROFILEVALID)(HPROFILE);
|
|
|
|
//
|
|
// BOOL
|
|
// CreateDeviceLinkProfile(
|
|
// PHPROFILE pahProfile,
|
|
// DWORD nProfiles,
|
|
// PBYTE *nProfileData,
|
|
// DWORD indexPreferredCMM
|
|
// );
|
|
//
|
|
typedef BOOL (FAR WINAPI * FPCREATEDEVICELINKPROFILE)(PHPROFILE, DWORD, PBYTE *, DWORD);
|
|
|
|
//
|
|
// HTRANSFORM
|
|
// CreateColorTransform(
|
|
// LPLOGCOLORSPACE[A|W] pLogColorSpace,
|
|
// HPROFILE hDestProfile,
|
|
// HPROFILE hTargetProfile,
|
|
// DWORD dwFlags
|
|
// );
|
|
//
|
|
typedef HTRANSFORM (FAR WINAPI * FPCREATECOLORTRANSFORMA)(LPLOGCOLORSPACEA, HPROFILE, HPROFILE, DWORD);
|
|
typedef HTRANSFORM (FAR WINAPI * FPCREATECOLORTRANSFORMW)(LPLOGCOLORSPACEW, HPROFILE, HPROFILE, DWORD);
|
|
|
|
//
|
|
// HTRANSFORM
|
|
// CreateMultiProfileTransform(
|
|
// PHPROFILE phProfile,
|
|
// DWORD nProfiles,
|
|
// PDWORD padwIntent,
|
|
// DWORD nIntents,
|
|
// DWORD dwFlags,
|
|
// DWORD indexPreferredCMM
|
|
// );
|
|
//
|
|
typedef HTRANSFORM (FAR WINAPI * FPCREATEMULTIPROFILETRANSFORM)(PHPROFILE, DWORD, PDWORD, DWORD, DWORD, DWORD);
|
|
|
|
//
|
|
// BOOL
|
|
// DeleteColorTransform(
|
|
// HTRANSFORM hxform
|
|
// );
|
|
//
|
|
typedef BOOL (FAR WINAPI * FPDELETECOLORTRANSFORM)(HTRANSFORM);
|
|
|
|
//
|
|
// BOOL
|
|
// TranslateBitmapBits(
|
|
// HTRANSFORM hxform,
|
|
// PVOID pSrcBits,
|
|
// BMFORMAT bmInput,
|
|
// DWORD dwWidth,
|
|
// DWORD dwHeight,
|
|
// DWORD dwInputStride,
|
|
// PVOID pDestBits,
|
|
// BMFORMAT bmOutput,
|
|
// DWORD dwOutputStride,
|
|
// PBMCALLBACKFN pfnCallback,
|
|
// ULONG ulCallbackData
|
|
// );
|
|
//
|
|
typedef BOOL (FAR WINAPI * FPTRANSLATEBITMAPBITS)(HTRANSFORM, PVOID, BMFORMAT, DWORD, DWORD, DWORD, PVOID, BMFORMAT, DWORD, PBMCALLBACKFN, ULONG);
|
|
|
|
//
|
|
// BOOL
|
|
// TranslateColors(
|
|
// HTRANSFORM hxform,
|
|
// PCOLOR paInputColors,
|
|
// DWORD nColors,
|
|
// COLORTYPE ctInput,
|
|
// PCOLOR paOutputColors,
|
|
// COLORTYPE ctOutput
|
|
// );
|
|
//
|
|
typedef BOOL (FAR WINAPI * FPTRANSLATECOLORS)(HTRANSFORM, PCOLOR, DWORD, COLORTYPE, PCOLOR, COLORTYPE);
|
|
|
|
//
|
|
// BOOL
|
|
// CheckBitmapBits(
|
|
// HTRANSFORM hxform,
|
|
// PVOID pSrcBits,
|
|
// BMFORMAT bmInput,
|
|
// DWORD dwWidth,
|
|
// DWORD dwHeight,
|
|
// DWORD dwStride,
|
|
// PBYTE paResult,
|
|
// PBMCALLBACKFN pfnCallback,
|
|
// ULONG ulCallbackData
|
|
// );
|
|
//
|
|
typedef BOOL (FAR WINAPI * FPCHECKBITMAPBITS)(HTRANSFORM , PVOID, BMFORMAT, DWORD, DWORD, DWORD, PBYTE, PBMCALLBACKFN, ULONG);
|
|
|
|
//
|
|
// BOOL
|
|
// TranslateColors(
|
|
// HTRANSFORM hxform,
|
|
// PCOLOR paInputColors,
|
|
// DWORD nColors,
|
|
// COLORTYPE ctInput,
|
|
// PCOLOR paOutputColors,
|
|
// COLORTYPE ctOutput
|
|
// );
|
|
//
|
|
typedef BOOL (FAR WINAPI * FPTRANSLATECOLORS)(HTRANSFORM, PCOLOR, DWORD, COLORTYPE, PCOLOR, COLORTYPE);
|
|
|
|
//
|
|
// BOOL
|
|
// CheckColors(
|
|
// HTRANSFORM hxform,
|
|
// PCOLOR paInputColors,
|
|
// DWORD nColors,
|
|
// COLORTYPE ctInput,
|
|
// PBYTE paResult
|
|
// );
|
|
//
|
|
typedef BOOL (FAR WINAPI * FPCHECKCOLORS)(HTRANSFORM, PCOLOR, DWORD, COLORTYPE, PBYTE);
|
|
|
|
//
|
|
// DWORD
|
|
// GetCMMInfo(
|
|
// HTRANSFORM hxform,
|
|
// DWORD dwInfo
|
|
// );
|
|
//
|
|
typedef DWORD (FAR WINAPI * FPGETCMMINFO)(HTRANSFORM, DWORD);
|
|
|
|
//
|
|
// BOOL
|
|
// RegisterCMM(
|
|
// PCTSTR pMachineName,
|
|
// DWORD cmmID,
|
|
// PCTSTR pCMMdll
|
|
// );
|
|
//
|
|
typedef BOOL (FAR WINAPI * FPREGISTERCMMA)(PCSTR, DWORD, PCSTR);
|
|
typedef BOOL (FAR WINAPI * FPREGISTERCMMW)(PCWSTR, DWORD, PCWSTR);
|
|
|
|
//
|
|
// BOOL
|
|
// UnregisterCMM(
|
|
// PCTSTR pMachineName,
|
|
// DWORD cmmID
|
|
// );
|
|
//
|
|
typedef BOOL (FAR WINAPI * FPUNREGISTERCMMA)(PCSTR, DWORD);
|
|
typedef BOOL (FAR WINAPI * FPUNREGISTERCMMW)(PCWSTR, DWORD);
|
|
|
|
//
|
|
// BOOL
|
|
// SelectCMM(
|
|
// DWORD dwCMMType
|
|
// );
|
|
//
|
|
typedef BOOL (FAR WINAPI * FPSELECTCMM)(DWORD);
|
|
|
|
//
|
|
// BOOL
|
|
// InstallColorProfile(
|
|
// PCTSTR pMachineName,
|
|
// PCTSTR pProfileName
|
|
// );
|
|
//
|
|
typedef BOOL (FAR WINAPI * FPINSTALLCOLORPROFILEA)(PCSTR, PCSTR);
|
|
typedef BOOL (FAR WINAPI * FPINSTALLCOLORPROFILEW)(PCWSTR, PCWSTR);
|
|
|
|
//
|
|
// BOOL
|
|
// UninstallColorProfile(
|
|
// PCTSTR pMachineName,
|
|
// PCTSTR pProfileName,
|
|
// BOOL bDelete
|
|
// );
|
|
//
|
|
typedef BOOL (FAR WINAPI * FPUNINSTALLCOLORPROFILEA)(PCSTR, PCSTR, BOOL);
|
|
typedef BOOL (FAR WINAPI * FPUNINSTALLCOLORPROFILEW)(PCWSTR, PCWSTR, BOOL);
|
|
|
|
//
|
|
// BOOL
|
|
// EnumColorProfiles(
|
|
// PCTSTR pMachineName,
|
|
// PENUMTYPE[A|W] pEnumRecord,
|
|
// PBYTE pBuffer,
|
|
// PDWORD pdwSize,
|
|
// PDWORD pnProfiles
|
|
// );
|
|
//
|
|
typedef BOOL (FAR WINAPI * FPENUMCOLORPROFILESA)(PCSTR, PENUMTYPEA, PBYTE, PDWORD, PDWORD);
|
|
typedef BOOL (FAR WINAPI * FPENUMCOLORPROFILESW)(PCWSTR, PENUMTYPEW, PBYTE, PDWORD, PDWORD);
|
|
|
|
//
|
|
// BOOL
|
|
// GetStandardColorSpaceProfile(
|
|
// PCTSTR pMachineName,
|
|
// DWORD dwSCS,
|
|
// PSTR pBuffer,
|
|
// PDWORD pdwSize
|
|
// );
|
|
//
|
|
typedef BOOL (FAR WINAPI * FPGETSTANDARDCOLORSPACEPROFILEA)(PCSTR, DWORD, PSTR, PDWORD);
|
|
typedef BOOL (FAR WINAPI * FPGETSTANDARDCOLORSPACEPROFILEW)(PCWSTR, DWORD, PWSTR, PDWORD);
|
|
|
|
//
|
|
// BOOL
|
|
// GetColorProfileHeader(
|
|
// HPROFILE hProfile,
|
|
// PPROFILEHEADER pProfileHeader
|
|
// );
|
|
//
|
|
typedef BOOL (FAR WINAPI * FPGETCOLORPROFILEHEADER)(HPROFILE, PPROFILEHEADER);
|
|
|
|
//
|
|
// BOOL
|
|
// GetColorDirectory(
|
|
// PCTSTR pMachineName,
|
|
// PTSTR pBuffer,
|
|
// PDWORD pdwSize
|
|
// );
|
|
typedef BOOL (FAR WINAPI * FPGETCOLORDIRECTORYA)(PCSTR, PSTR, PDWORD);
|
|
typedef BOOL (FAR WINAPI * FPGETCOLORDIRECTORYW)(PCWSTR, PWSTR, PDWORD);
|
|
|
|
//
|
|
// BOOL WINAPI CreateProfileFromLogColorSpaceA(
|
|
// LPLOGCOLORSPACEA pLogColorSpace,
|
|
// PBYTE *pBuffer
|
|
// );
|
|
//
|
|
typedef BOOL (FAR WINAPI * FPCREATEPROFILEFROMLOGCOLORSPACEA)(LPLOGCOLORSPACEA,PBYTE *);
|
|
typedef BOOL (FAR WINAPI * FPCREATEPROFILEFROMLOGCOLORSPACEW)(LPLOGCOLORSPACEW,PBYTE *);
|
|
|
|
//
|
|
// BOOL InternalGetDeviceConfig(
|
|
// LPCTSTR pDeviceName,
|
|
// DWORD dwDeviceClass
|
|
// DWORD dwConfigType,
|
|
// PVOID pConfig,
|
|
// PDWORD pdwSize
|
|
// );
|
|
//
|
|
typedef BOOL (FAR * FPINTERNALGETDEVICECONFIG)(LPCWSTR,DWORD,DWORD,PVOID,PDWORD);
|
|
|
|
extern HINSTANCE ghICM;
|
|
extern BOOL gbICMEnabledOnceBefore;
|
|
|
|
extern RTL_CRITICAL_SECTION semListIcmInfo;
|
|
extern RTL_CRITICAL_SECTION semColorTransformCache;
|
|
extern RTL_CRITICAL_SECTION semColorSpaceCache;
|
|
|
|
extern LIST_ENTRY ListIcmInfo;
|
|
extern LIST_ENTRY ListCachedColorSpace;
|
|
extern LIST_ENTRY ListCachedColorTransform;
|
|
|
|
//
|
|
// ANSI version function in MSCMS.DLL will not called.
|
|
//
|
|
// extern FPOPENCOLORPROFILEA fpOpenColorProfileA;
|
|
// extern FPCREATECOLORTRANSFORMA fpCreateColorTransformA;
|
|
// extern FPREGISTERCMMA fpRegisterCMMA;
|
|
// extern FPUNREGISTERCMMA fpUnregisterCMMA;
|
|
// extern FPINSTALLCOLORPROFILEA fpInstallColorProfileA;
|
|
// extern FPUNINSTALLCOLORPROFILEA fpUninstallColorProfileA;
|
|
// extern FPGETSTANDARDCOLORSPACEPROFILEA fpGetStandardColorSpaceProfileA;
|
|
// extern FPENUMCOLORPROFILESA fpEnumColorProfilesA;
|
|
// extern FPGETCOLORDIRECTORYA fpGetColorDirectoryA;
|
|
//
|
|
// And Following function does not used from gdi32.dll
|
|
//
|
|
// extern FPISCOLORPROFILEVALID fpIsColorProfileValid;
|
|
// extern FPCREATEDEVICELINKPROFILE fpCreateDeviceLinkProfile;
|
|
// extern FPTRANSLATECOLORS fpTranslateColors;
|
|
// extern FPCHECKCOLORS fpCheckColors;
|
|
// extern FPGETCMMINFO fpGetCMMInfo;
|
|
// extern FPSELECTCMM fpSelectCMM;
|
|
//
|
|
|
|
extern FPOPENCOLORPROFILEW fpOpenColorProfileW;
|
|
extern FPCLOSECOLORPROFILE fpCloseColorProfile;
|
|
extern FPCREATECOLORTRANSFORMW fpCreateColorTransformW;
|
|
extern FPDELETECOLORTRANSFORM fpDeleteColorTransform;
|
|
extern FPTRANSLATECOLORS fpTranslateColors;
|
|
extern FPTRANSLATEBITMAPBITS fpTranslateBitmapBits;
|
|
extern FPCHECKBITMAPBITS fpCheckBitmapBits;
|
|
extern FPREGISTERCMMW fpRegisterCMMW;
|
|
extern FPUNREGISTERCMMW fpUnregisterCMMW;
|
|
extern FPINSTALLCOLORPROFILEW fpInstallColorProfileW;
|
|
extern FPUNINSTALLCOLORPROFILEW fpUninstallColorProfileW;
|
|
extern FPENUMCOLORPROFILESW fpEnumColorProfilesW;
|
|
extern FPGETSTANDARDCOLORSPACEPROFILEW fpGetStandardColorSpaceProfileW;
|
|
extern FPGETCOLORPROFILEHEADER fpGetColorProfileHeader;
|
|
extern FPGETCOLORDIRECTORYW fpGetColorDirectoryW;
|
|
extern FPCREATEPROFILEFROMLOGCOLORSPACEW fpCreateProfileFromLogColorSpaceW;
|
|
extern FPCREATEMULTIPROFILETRANSFORM fpCreateMultiProfileTransform;
|
|
extern FPINTERNALGETDEVICECONFIG fpInternalGetDeviceConfig;
|
|
|
|
//
|
|
// Functions GDI internal use (defined in icm.c)
|
|
//
|
|
|
|
//
|
|
// Color Translation Functions
|
|
//
|
|
|
|
BOOL
|
|
IcmTranslateDIB(
|
|
HDC hdc,
|
|
PDC_ATTR pdcattr,
|
|
ULONG nColors,
|
|
PVOID pBitsIn,
|
|
PVOID *ppBitsOut,
|
|
PBITMAPINFO pbmi,
|
|
PBITMAPINFO *pbmiNew,
|
|
DWORD *pcjbmiNew,
|
|
DWORD dwNumScan,
|
|
UINT iUsage,
|
|
DWORD dwFlags,
|
|
PCACHED_COLORSPACE *ppBitmapColorSpace,
|
|
PCACHED_COLORTRANSFORM *ppCXform
|
|
);
|
|
|
|
BOOL
|
|
IcmTranslateCOLORREF(
|
|
HDC hdc,
|
|
PDC_ATTR pdcattr,
|
|
COLORREF ColorIn,
|
|
COLORREF *ColorOut,
|
|
DWORD Flags
|
|
);
|
|
|
|
BOOL
|
|
IcmTranslateBrushColor(
|
|
HDC hdc,
|
|
PDC_ATTR pdcattr,
|
|
HBRUSH hbrush
|
|
);
|
|
|
|
BOOL
|
|
IcmTranslatePenColor(
|
|
HDC hdc,
|
|
PDC_ATTR pdcattr,
|
|
HPEN hpen
|
|
);
|
|
|
|
BOOL
|
|
IcmTranslateExtPenColor(
|
|
HDC hdc,
|
|
PDC_ATTR pdcattr,
|
|
HPEN hpen
|
|
);
|
|
|
|
BOOL
|
|
IcmTranslateColorObjects(
|
|
HDC hdc,
|
|
PDC_ATTR pdcattr,
|
|
BOOL bICMEnable
|
|
);
|
|
|
|
BOOL
|
|
IcmTranslateTRIVERTEX(
|
|
HDC hdc,
|
|
PDC_ATTR pdcattr,
|
|
PTRIVERTEX pVertex,
|
|
ULONG nVertex
|
|
);
|
|
|
|
BOOL
|
|
IcmTranslatePaletteEntry(
|
|
HDC hdc,
|
|
PDC_ATTR pdcattr,
|
|
PALETTEENTRY *pColorIn,
|
|
PALETTEENTRY *pColorOut,
|
|
UINT NumberOfEntries
|
|
);
|
|
|
|
//
|
|
// DC related functions
|
|
//
|
|
|
|
PGDI_ICMINFO
|
|
IcmInitIcmInfo(
|
|
HDC hdc,
|
|
PDC_ATTR pdcattr
|
|
);
|
|
|
|
BOOL
|
|
IcmCleanupIcmInfo(
|
|
PDC_ATTR pdcattr,
|
|
PGDI_ICMINFO pIcmInfo
|
|
);
|
|
|
|
PGDI_ICMINFO
|
|
IcmGetUnusedIcmInfo(
|
|
HDC hdc
|
|
);
|
|
|
|
BOOL
|
|
IcmInitLocalDC(
|
|
HDC hdc,
|
|
HANDLE hPrinter,
|
|
CONST DEVMODEW *pdm,
|
|
BOOL bReset
|
|
);
|
|
|
|
BOOL
|
|
IcmDeleteLocalDC(
|
|
HDC hdc,
|
|
PDC_ATTR pdcattr,
|
|
PGDI_ICMINFO pIcmInfo
|
|
);
|
|
|
|
BOOL
|
|
IcmUpdateLocalDCColorSpace(
|
|
HDC hdc,
|
|
PDC_ATTR pdcattr
|
|
);
|
|
|
|
VOID
|
|
IcmReleaseDCColorSpace(
|
|
PGDI_ICMINFO pIcmInfo,
|
|
BOOL bReleaseDC
|
|
);
|
|
|
|
BOOL
|
|
IcmUpdateDCColorInfo(
|
|
HDC hdc,
|
|
PDC_ATTR pdcattr
|
|
);
|
|
|
|
BOOL
|
|
IcmEnableForCompatibleDC(
|
|
HDC hdcCompatible,
|
|
HDC hdcDevice,
|
|
PDC_ATTR pdcaDevice
|
|
);
|
|
|
|
BOOL
|
|
IcmSaveDC(
|
|
HDC hdc,
|
|
PDC_ATTR pdcattr,
|
|
PGDI_ICMINFO pIcmInfo
|
|
);
|
|
|
|
VOID
|
|
IcmRestoreDC(
|
|
PDC_ATTR pdcattr,
|
|
int iLevel,
|
|
PGDI_ICMINFO pIcmInfo
|
|
);
|
|
|
|
//
|
|
// SelectObject functions
|
|
//
|
|
|
|
BOOL
|
|
IcmSelectColorTransform (
|
|
HDC hdc,
|
|
PDC_ATTR pdcattr,
|
|
PCACHED_COLORTRANSFORM pCXform,
|
|
BOOL bDeviceCalibrate
|
|
);
|
|
|
|
HBRUSH
|
|
IcmSelectBrush (
|
|
HDC hdc,
|
|
PDC_ATTR pdcattr,
|
|
HBRUSH hbrushNew
|
|
);
|
|
|
|
HPEN
|
|
IcmSelectPen(
|
|
HDC hdc,
|
|
PDC_ATTR pdcattr,
|
|
HPEN hpenNew
|
|
);
|
|
|
|
HPEN
|
|
IcmSelectExtPen(
|
|
HDC hdc,
|
|
PDC_ATTR pdcattr,
|
|
HPEN hpenNew
|
|
);
|
|
|
|
//
|
|
// Profile Enumuration related
|
|
//
|
|
|
|
int
|
|
IcmEnumColorProfile(
|
|
HDC hdc,
|
|
PVOID pvCallBack,
|
|
LPARAM lParam,
|
|
BOOL bAnsiCallBack,
|
|
PDEVMODEW pDevModeW,
|
|
DWORD *pdwColorSpaceFlag
|
|
);
|
|
|
|
int CALLBACK
|
|
IcmQueryProfileCallBack(
|
|
LPWSTR lpFileName,
|
|
LPARAM lAppData
|
|
);
|
|
|
|
int CALLBACK
|
|
IcmFindProfileCallBack(
|
|
LPWSTR lpFileName,
|
|
LPARAM lAppData
|
|
);
|
|
|
|
BOOL
|
|
IcmCreateTemporaryColorProfile(
|
|
LPWSTR TemporaryColorProfile,
|
|
LPBYTE ProfileData,
|
|
DWORD ProfileDataSize
|
|
);
|
|
|
|
//
|
|
// Filename/Path related.
|
|
//
|
|
|
|
PWSTR
|
|
GetFileNameFromPath(
|
|
PWSTR pwszFileName
|
|
);
|
|
|
|
PWSZ
|
|
BuildIcmProfilePath(
|
|
PWSZ FileName,
|
|
PWSZ FullPathFileName,
|
|
ULONG BufferSize
|
|
);
|
|
|
|
//
|
|
// Color Transform management
|
|
//
|
|
|
|
PCACHED_COLORTRANSFORM
|
|
IcmGetFirstNonUsedColorTransform(
|
|
VOID
|
|
);
|
|
|
|
PCACHED_COLORTRANSFORM
|
|
IcmGetColorTransform(
|
|
HDC hdc,
|
|
PCACHED_COLORSPACE pSourceColorSpace,
|
|
PCACHED_COLORSPACE pDestColorSpace,
|
|
PCACHED_COLORSPACE pTargetColorSpace,
|
|
BOOL bNeedDeviceXform
|
|
);
|
|
|
|
PCACHED_COLORTRANSFORM
|
|
IcmCreateColorTransform(
|
|
HDC hdc,
|
|
PDC_ATTR pdcattr,
|
|
PCACHED_COLORSPACE lpOptionalColorSpace,
|
|
DWORD dwFlags
|
|
);
|
|
|
|
BOOL
|
|
IcmDeleteColorTransform(
|
|
HANDLE hcmXformToBeDeleted,
|
|
BOOL bForceDelete
|
|
);
|
|
|
|
BOOL
|
|
IcmDeleteDCColorTransforms(
|
|
PGDI_ICMINFO pIcmInfo
|
|
);
|
|
|
|
BOOL
|
|
IcmDeleteCachedColorTransforms(
|
|
HDC hdc
|
|
);
|
|
|
|
BOOL
|
|
IcmIsCacheable(
|
|
PCACHED_COLORSPACE pColorSpace
|
|
);
|
|
|
|
//
|
|
// Color Space/Profile management
|
|
//
|
|
|
|
HCOLORSPACE WINAPI
|
|
CreateColorSpaceInternalW(
|
|
LPLOGCOLORSPACEW lpLogColorSpace,
|
|
DWORD dwCreateFlags
|
|
);
|
|
|
|
BOOL
|
|
SetICMProfileInternalA(
|
|
HDC hdc,
|
|
LPSTR pszFileName,
|
|
PCACHED_COLORSPACE pColorSpace,
|
|
DWORD dwFlags
|
|
);
|
|
|
|
BOOL
|
|
SetICMProfileInternalW(
|
|
HDC hdc,
|
|
LPWSTR pwszFileName,
|
|
PCACHED_COLORSPACE pColorSpace,
|
|
DWORD dwFlags
|
|
);
|
|
|
|
BOOL WINAPI
|
|
ColorMatchToTargetInternal(
|
|
HDC hdc,
|
|
PCACHED_COLORSPACE pTargetColorSpace,
|
|
DWORD uiAction
|
|
);
|
|
|
|
HCOLORSPACE
|
|
IcmSetSourceColorSpace(
|
|
HDC hdc,
|
|
HCOLORSPACE hColorSpace,
|
|
PCACHED_COLORSPACE pColorSpace,
|
|
DWORD dwFlags
|
|
);
|
|
|
|
BOOL
|
|
IcmSetDestinationColorSpace(
|
|
HDC hdc,
|
|
LPWSTR pwszFileName,
|
|
PCACHED_COLORSPACE pColorSpace,
|
|
DWORD dwFlags
|
|
);
|
|
|
|
BOOL
|
|
IcmSetTargetColorSpace(
|
|
HDC hdc,
|
|
PCACHED_COLORSPACE pColorSpace,
|
|
DWORD uiAction
|
|
);
|
|
|
|
BMFORMAT
|
|
IcmGetProfileColorFormat(
|
|
HPROFILE hProfile
|
|
);
|
|
|
|
BOOL
|
|
IcmCreateProfileFromLCS(
|
|
LPLOGCOLORSPACEW lpLogColorSpaceW,
|
|
PVOID *ppvProfileData,
|
|
PULONG pulProfileSize
|
|
);
|
|
|
|
PCACHED_COLORSPACE
|
|
IcmCreateColorSpaceByColorSpace(
|
|
HGDIOBJ hObj,
|
|
LPLOGCOLORSPACEW lpLogColorSpace,
|
|
PPROFILE pProfileData,
|
|
DWORD dwFlags
|
|
);
|
|
|
|
PCACHED_COLORSPACE
|
|
IcmCreateColorSpaceByName(
|
|
HGDIOBJ hObj,
|
|
PWSZ ColorProfileName,
|
|
DWORD dwIntent,
|
|
DWORD dwFlags
|
|
);
|
|
|
|
PCACHED_COLORSPACE
|
|
IcmGetColorSpaceByHandle(
|
|
HGDIOBJ hObj,
|
|
HCOLORSPACE hColorSpace,
|
|
LPLOGCOLORSPACEW lpLogColorSpace,
|
|
DWORD dwFlags
|
|
);
|
|
|
|
PCACHED_COLORSPACE
|
|
IcmGetColorSpaceByColorSpace(
|
|
HGDIOBJ hObj,
|
|
LPLOGCOLORSPACEW lpLogColorSpace,
|
|
PPROFILE pProfileData,
|
|
DWORD dwFlags
|
|
);
|
|
|
|
PCACHED_COLORSPACE
|
|
IcmGetColorSpaceByName(
|
|
HGDIOBJ hObj,
|
|
PWSZ ColorProfileName,
|
|
DWORD dwIntent,
|
|
DWORD dwFlags
|
|
);
|
|
|
|
BOOL
|
|
IcmSameColorSpace(
|
|
PCACHED_COLORSPACE pColorSpaceA,
|
|
PCACHED_COLORSPACE pColorSapceB
|
|
);
|
|
|
|
VOID
|
|
IcmReleaseColorSpace(
|
|
HGDIOBJ hObj,
|
|
PCACHED_COLORSPACE pColorSpace,
|
|
BOOL bReleaseDC
|
|
);
|
|
|
|
BOOL
|
|
IcmReleaseCachedColorSpace(
|
|
HGDIOBJ hObj
|
|
);
|
|
|
|
int
|
|
IcmAskDriverForColorProfile(
|
|
PLDC pldc,
|
|
ULONG ulQueryMode,
|
|
PDEVMODEW pDevMode,
|
|
PWSTR pProfileName,
|
|
DWORD *pdwColorSpaceFlag
|
|
);
|
|
|
|
BOOL
|
|
IcmRealizeColorProfile(
|
|
PCACHED_COLORSPACE pColorSpace,
|
|
BOOL bCheckColorFormat
|
|
);
|
|
|
|
VOID
|
|
IcmUnrealizeColorProfile(
|
|
PCACHED_COLORSPACE pColorSpace
|
|
);
|
|
|
|
//
|
|
// Metafile related
|
|
//
|
|
VOID
|
|
IcmInsertMetafileList(
|
|
PLIST_ENTRY pAttachedColorProfile,
|
|
PWSZ ProfileName
|
|
);
|
|
|
|
BOOL
|
|
IcmCheckMetafileList(
|
|
PLIST_ENTRY pAttachedColorProfile,
|
|
PWSZ ProfileName
|
|
);
|
|
|
|
VOID
|
|
IcmFreeMetafileList(
|
|
PLIST_ENTRY pAttachedColorProfile
|
|
);
|
|
|
|
//
|
|
// Bitmap color space
|
|
//
|
|
BOOL
|
|
IcmGetBitmapColorSpace(
|
|
LPBITMAPINFO pbmi,
|
|
LPLOGCOLORSPACEW plcspw,
|
|
PPROFILE pProfileData,
|
|
PDWORD pdwFlags
|
|
);
|
|
|
|
PCACHED_COLORSPACE
|
|
IcmGetColorSpaceforBitmap(
|
|
HBITMAP hbm
|
|
);
|
|
|
|
//
|
|
// Icm Blting
|
|
//
|
|
BOOL
|
|
IcmStretchBlt(HDC hdc, int x, int y, int cx, int cy,
|
|
HDC hdcSrc, int x1, int y1, int cx1, int cy1, DWORD rop,
|
|
PDC_ATTR pdcattr, PDC_ATTR pdcattrSrc);
|
|
|
|
|