Icm.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:30k
源码类别:

模拟服务器

开发平台:

C/C++

  1. /*++
  2. Copyright (c) Microsoft Corporation. All rights reserved.
  3. Module Name:
  4.     icm.h
  5. Abstract:
  6.     Public header file for Image Color Management
  7. Revision History:
  8. --*/
  9. #ifndef _ICM_H_
  10. #define _ICM_H_
  11. #if _MSC_VER > 1000
  12. #pragma once
  13. #endif
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17. //
  18. // Support for named color profiles
  19. //
  20. typedef char COLOR_NAME[32];
  21. typedef COLOR_NAME *PCOLOR_NAME, *LPCOLOR_NAME;
  22. typedef struct tagNAMED_PROFILE_INFO{
  23. DWORD dwFlags;
  24. DWORD dwCount;
  25. DWORD dwCountDevCoordinates;
  26. COLOR_NAME szPrefix;
  27. COLOR_NAME szSuffix;
  28. }NAMED_PROFILE_INFO;
  29. typedef NAMED_PROFILE_INFO *PNAMED_PROFILE_INFO, *LPNAMED_PROFILE_INFO;
  30. //
  31. // Color spaces
  32. //
  33. // The following color spaces are supported.
  34. // Gray, RGB, CMYK, XYZ, Yxy, Lab, generic 3 channel color spaces where
  35. // the profiles defines how to interpret the 3 channels, named color spaces
  36. // which can either be indices into the space or have color names, and
  37. // multichannel spaces with 1 byte per channel upto MAX_COLOR_CHANNELS.
  38. //
  39. #define MAX_COLOR_CHANNELS  8   // maximum number of HiFi color channels
  40. struct GRAYCOLOR {
  41.     WORD    gray;
  42. };
  43. struct RGBCOLOR {
  44.     WORD    red;
  45.     WORD    green;
  46.     WORD    blue;
  47. };
  48. struct CMYKCOLOR {
  49.     WORD    cyan;
  50.     WORD    magenta;
  51.     WORD    yellow;
  52.     WORD    black;
  53. };
  54. struct XYZCOLOR {
  55.     WORD    X;
  56.     WORD    Y;
  57.     WORD    Z;
  58. };
  59. struct YxyCOLOR {
  60.     WORD    Y;
  61.     WORD    x;
  62.     WORD    y;
  63. };
  64. struct LabCOLOR {
  65.     WORD    L;
  66.     WORD    a;
  67.     WORD    b;
  68. };
  69. struct GENERIC3CHANNEL {
  70.     WORD    ch1;
  71.     WORD    ch2;
  72.     WORD    ch3;
  73. };
  74. struct NAMEDCOLOR {
  75.     DWORD        dwIndex;
  76. };
  77. struct HiFiCOLOR {
  78.     BYTE    channel[MAX_COLOR_CHANNELS];
  79. };
  80. typedef union tagCOLOR {
  81.     struct GRAYCOLOR        gray;
  82.     struct RGBCOLOR         rgb;
  83.     struct CMYKCOLOR        cmyk;
  84.     struct XYZCOLOR         XYZ;
  85.     struct YxyCOLOR         Yxy;
  86.     struct LabCOLOR         Lab;
  87.     struct GENERIC3CHANNEL  gen3ch;
  88.     struct NAMEDCOLOR       named;
  89.     struct HiFiCOLOR        hifi;
  90.     
  91.     struct {                // alignment padding.   
  92.         DWORD reserved1;
  93.         VOID *reserved2;
  94.     };
  95. } COLOR;
  96. typedef COLOR *PCOLOR, *LPCOLOR;
  97. typedef enum {
  98.     COLOR_GRAY       =   1,
  99.     COLOR_RGB,
  100.     COLOR_XYZ,
  101.     COLOR_Yxy,
  102.     COLOR_Lab,
  103.     COLOR_3_CHANNEL,        // WORD per channel
  104.     COLOR_CMYK,
  105.     COLOR_5_CHANNEL,        // BYTE per channel
  106.     COLOR_6_CHANNEL,        //      - do -
  107.     COLOR_7_CHANNEL,        //      - do -
  108.     COLOR_8_CHANNEL,        //      - do -
  109.     COLOR_NAMED,
  110. } COLORTYPE;
  111. typedef COLORTYPE *PCOLORTYPE, *LPCOLORTYPE;
  112. //
  113. // Bitmap formats supported
  114. //
  115. typedef enum {
  116.     //
  117.     // 16bpp - 5 bits per channel. The most significant bit is ignored.
  118.     //
  119.     BM_x555RGB      = 0x0000,
  120.     BM_x555XYZ      = 0x0101,
  121.     BM_x555Yxy,
  122.     BM_x555Lab,
  123.     BM_x555G3CH,
  124.     //
  125.     // Packed 8 bits per channel => 8bpp for GRAY and
  126.     // 24bpp for the 3 channel colors, more for hifi channels
  127.     //
  128.     BM_RGBTRIPLETS  = 0x0002,
  129.     BM_BGRTRIPLETS  = 0x0004,
  130.     BM_XYZTRIPLETS  = 0x0201,
  131.     BM_YxyTRIPLETS,
  132.     BM_LabTRIPLETS,
  133.     BM_G3CHTRIPLETS,
  134.     BM_5CHANNEL,
  135.     BM_6CHANNEL,
  136.     BM_7CHANNEL,
  137.     BM_8CHANNEL,
  138.     BM_GRAY,
  139.     //
  140.     // 32bpp - 8 bits per channel. The most significant byte is ignored
  141.     // for the 3 channel colors.
  142.     //
  143.     BM_xRGBQUADS    = 0x0008,
  144.     BM_xBGRQUADS    = 0x0010,
  145.     BM_xG3CHQUADS   = 0x0304,
  146.     BM_KYMCQUADS,
  147.     BM_CMYKQUADS    = 0x0020,
  148.     //
  149.     // 32bpp - 10 bits per channel. The 2 most significant bits are ignored.
  150.     //
  151.     BM_10b_RGB      = 0x0009,
  152.     BM_10b_XYZ      = 0x0401,
  153.     BM_10b_Yxy,
  154.     BM_10b_Lab,
  155.     BM_10b_G3CH,
  156.     //
  157.     // 32bpp - named color indices (1-based)
  158.     //
  159.     BM_NAMED_INDEX,
  160.     //
  161.     // Packed 16 bits per channel => 16bpp for GRAY and
  162.     // 48bpp for the 3 channel colors.
  163.     //
  164.     BM_16b_RGB      = 0x000A,
  165.     BM_16b_XYZ      = 0x0501,
  166.     BM_16b_Yxy,
  167.     BM_16b_Lab,
  168.     BM_16b_G3CH,
  169.     BM_16b_GRAY,
  170.     //
  171.     // 16 bpp - 5 bits for Red & Blue, 6 bits for Green
  172.     //
  173.     BM_565RGB       = 0x0001,
  174. } BMFORMAT;
  175. typedef BMFORMAT *PBMFORMAT, *LPBMFORMAT;
  176. //
  177. // Callback function definition
  178. //
  179. typedef BOOL (WINAPI *PBMCALLBACKFN)(ULONG, ULONG, LPARAM);
  180. typedef PBMCALLBACKFN LPBMCALLBACKFN;
  181. //
  182. // ICC profile header
  183. //
  184. typedef struct tagPROFILEHEADER {
  185.     DWORD   phSize;             // profile size in bytes
  186.     DWORD   phCMMType;          // CMM for this profile
  187.     DWORD   phVersion;          // profile format version number
  188.     DWORD   phClass;            // type of profile
  189.     DWORD   phDataColorSpace;   // color space of data
  190.     DWORD   phConnectionSpace;  // PCS
  191.     DWORD   phDateTime[3];      // date profile was created
  192.     DWORD   phSignature;        // magic number
  193.     DWORD   phPlatform;         // primary platform
  194.     DWORD   phProfileFlags;     // various bit settings
  195.     DWORD   phManufacturer;     // device manufacturer
  196.     DWORD   phModel;            // device model number
  197.     DWORD   phAttributes[2];    // device attributes
  198.     DWORD   phRenderingIntent;  // rendering intent
  199.     CIEXYZ  phIlluminant;       // profile illuminant
  200.     DWORD   phCreator;          // profile creator
  201.     BYTE    phReserved[44];     // reserved for future use
  202. } PROFILEHEADER;
  203. typedef PROFILEHEADER *PPROFILEHEADER, *LPPROFILEHEADER;
  204. //
  205. // Profile class values
  206. //
  207. #define CLASS_MONITOR           'mntr'
  208. #define CLASS_PRINTER           'prtr'
  209. #define CLASS_SCANNER           'scnr'
  210. #define CLASS_LINK              'link'
  211. #define CLASS_ABSTRACT          'abst'
  212. #define CLASS_COLORSPACE        'spac'
  213. #define CLASS_NAMED             'nmcl'
  214. //
  215. // Color space values
  216. //
  217. #define SPACE_XYZ               'XYZ '
  218. #define SPACE_Lab               'Lab '
  219. #define SPACE_Luv               'Luv '
  220. #define SPACE_YCbCr             'YCbr'
  221. #define SPACE_Yxy               'Yxy '
  222. #define SPACE_RGB               'RGB '
  223. #define SPACE_GRAY              'GRAY'
  224. #define SPACE_HSV               'HSV '
  225. #define SPACE_HLS               'HLS '
  226. #define SPACE_CMYK              'CMYK'
  227. #define SPACE_CMY               'CMY '
  228. #define SPACE_2_CHANNEL         '2CLR'
  229. #define SPACE_3_CHANNEL         '3CLR'
  230. #define SPACE_4_CHANNEL         '4CLR'
  231. #define SPACE_5_CHANNEL         '5CLR'
  232. #define SPACE_6_CHANNEL         '6CLR'
  233. #define SPACE_7_CHANNEL         '7CLR'
  234. #define SPACE_8_CHANNEL         '8CLR'
  235. //
  236. // Profile flag bitfield values
  237. //
  238. #define FLAG_EMBEDDEDPROFILE    0x00000001
  239. #define FLAG_DEPENDENTONDATA    0x00000002
  240. //
  241. // Profile attributes bitfield values
  242. //
  243. #define ATTRIB_TRANSPARENCY     0x00000001
  244. #define ATTRIB_MATTE            0x00000002
  245. //
  246. // Rendering Intents
  247. //
  248. // + INTENT_PERCEPTUAL            = LCS_GM_IMAGES for LOGCOLORSPACE
  249. //                                = DMICM_CONTRAST for DEVMODE
  250. //                                = "Pictures" for SetupColorMathing/Printer UI
  251. //
  252. // + INTENT_RELATIVE_COLORIMETRIC = LCS_GM_GRAPHICS for LOGCOLORSPACE
  253. //                                = DMICM_COLORIMETRIC for DEVMODE
  254. //                                = "Proof" for SetupColorMatching/Printer UI
  255. //
  256. // + INTENT_SATURATION            = LCS_GM_BUSINESS for LOGCOLORSPACE
  257. //                                = DMICM_SATURATE for DEVMODE
  258. //                                = "Graphics" for SetupColorMatching/Printer UI
  259. //
  260. // + INTENT_ABSOLUTE_COLORIMETRIC = LCS_GM_ABS_COLORIMETRIC for LOGCOLORSPACE
  261. //                                = DMICM_ABS_COLORIMETRIC for DEVMODE
  262. //                                = "Match" for SetupColorMatching/Printer UI
  263. //
  264. #define INTENT_PERCEPTUAL               0
  265. #define INTENT_RELATIVE_COLORIMETRIC    1
  266. #define INTENT_SATURATION               2
  267. #define INTENT_ABSOLUTE_COLORIMETRIC    3
  268. //
  269. // Profile data structure
  270. //
  271. typedef struct tagPROFILE {
  272.     DWORD   dwType;             // profile type
  273.     PVOID   pProfileData;       // filename or buffer containing profile
  274.     DWORD   cbDataSize;         // size of profile data
  275. } PROFILE;
  276. typedef PROFILE *PPROFILE, *LPPROFILE;
  277. //
  278. // Profile types to be used in the PROFILE structure
  279. //
  280. #define PROFILE_FILENAME    1   // profile data is NULL terminated filename
  281. #define PROFILE_MEMBUFFER   2   // profile data is a buffer containing
  282.                                 // the profile
  283. //
  284. // Desired access mode for opening profiles
  285. //
  286. #define PROFILE_READ        1   // opened for read access
  287. #define PROFILE_READWRITE   2   // opened for read and write access
  288. //
  289. // Handles returned to applications
  290. //
  291. typedef HANDLE HPROFILE;        // handle to profile object
  292. typedef HPROFILE *PHPROFILE;
  293. typedef HANDLE HTRANSFORM;      // handle to color transform object
  294. //
  295. // CMM selection for CreateMultiProfileTransform and SelectCMM.
  296. //
  297. #define INDEX_DONT_CARE     0
  298. #define CMM_FROM_PROFILE    INDEX_DONT_CARE // Use CMM specified in profile.
  299. #define CMM_WINDOWS_DEFAULT 'Win '          // Use Windows default CMM always.
  300. //
  301. // Tags found in ICC profiles
  302. //
  303. typedef DWORD      TAGTYPE;
  304. typedef TAGTYPE   *PTAGTYPE, *LPTAGTYPE;
  305. //
  306. // Profile enumeration data structure
  307. //
  308. #define ENUM_TYPE_VERSION    0x0300
  309. typedef struct tagENUMTYPEA {
  310.     DWORD   dwSize;             // structure size
  311.     DWORD   dwVersion;          // structure version
  312.     DWORD   dwFields;           // bit fields
  313.     PCSTR   pDeviceName;        // device friendly name
  314.     DWORD   dwMediaType;        // media type
  315.     DWORD   dwDitheringMode;    // dithering mode
  316.     DWORD   dwResolution[2];    // x and y resolutions
  317.     DWORD   dwCMMType;          // cmm ID
  318.     DWORD   dwClass;            // profile class
  319.     DWORD   dwDataColorSpace;   // color space of data
  320.     DWORD   dwConnectionSpace;  // pcs
  321.     DWORD   dwSignature;        // magic number
  322.     DWORD   dwPlatform;         // primary platform
  323.     DWORD   dwProfileFlags;     // various bit settings in profile
  324.     DWORD   dwManufacturer;     // manufacturer ID
  325.     DWORD   dwModel;            // model ID
  326.     DWORD   dwAttributes[2];    // device attributes
  327.     DWORD   dwRenderingIntent;  // rendering intent
  328.     DWORD   dwCreator;          // profile creator
  329.     DWORD   dwDeviceClass;      // device class
  330. } ENUMTYPEA, *PENUMTYPEA, *LPENUMTYPEA;
  331. typedef struct tagENUMTYPEW {
  332.     DWORD   dwSize;             // structure size
  333.     DWORD   dwVersion;          // structure version
  334.     DWORD   dwFields;           // bit fields
  335.     PCWSTR  pDeviceName;        // device friendly name
  336.     DWORD   dwMediaType;        // media type
  337.     DWORD   dwDitheringMode;    // dithering mode
  338.     DWORD   dwResolution[2];    // x and y resolutions
  339.     DWORD   dwCMMType;          // cmm ID
  340.     DWORD   dwClass;            // profile class
  341.     DWORD   dwDataColorSpace;   // color space of data
  342.     DWORD   dwConnectionSpace;  // pcs
  343.     DWORD   dwSignature;        // magic number
  344.     DWORD   dwPlatform;         // primary platform
  345.     DWORD   dwProfileFlags;     // various bit settings in profile
  346.     DWORD   dwManufacturer;     // manufacturer ID
  347.     DWORD   dwModel;            // model ID
  348.     DWORD   dwAttributes[2];    // device attributes
  349.     DWORD   dwRenderingIntent;  // rendering intent
  350.     DWORD   dwCreator;          // profile creator
  351.     DWORD   dwDeviceClass;      // device class
  352. } ENUMTYPEW, *PENUMTYPEW, *LPENUMTYPEW;
  353. //
  354. // Bitfields for enumeration record above
  355. //
  356. #define ET_DEVICENAME           0x00000001
  357. #define ET_MEDIATYPE            0x00000002
  358. #define ET_DITHERMODE           0x00000004
  359. #define ET_RESOLUTION           0x00000008
  360. #define ET_CMMTYPE              0x00000010
  361. #define ET_CLASS                0x00000020
  362. #define ET_DATACOLORSPACE       0x00000040
  363. #define ET_CONNECTIONSPACE      0x00000080
  364. #define ET_SIGNATURE            0x00000100
  365. #define ET_PLATFORM             0x00000200
  366. #define ET_PROFILEFLAGS         0x00000400
  367. #define ET_MANUFACTURER         0x00000800
  368. #define ET_MODEL                0x00001000
  369. #define ET_ATTRIBUTES           0x00002000
  370. #define ET_RENDERINGINTENT      0x00004000
  371. #define ET_CREATOR              0x00008000
  372. #define ET_DEVICECLASS          0x00010000
  373. //
  374. // Flags for creating color transforms
  375. //
  376. #define PROOF_MODE                  0x00000001
  377. #define NORMAL_MODE                 0x00000002
  378. #define BEST_MODE                   0x00000003
  379. #define ENABLE_GAMUT_CHECKING       0x00010000
  380. #define USE_RELATIVE_COLORIMETRIC   0x00020000
  381. #define FAST_TRANSLATE              0x00040000
  382. #define RESERVED                    0x80000000
  383. //
  384. // Paremeter for GetPS2ColorSpaceArray
  385. //
  386. #define CSA_A                   1
  387. #define CSA_ABC                 2
  388. #define CSA_DEF                 3
  389. #define CSA_DEFG                4
  390. #define CSA_GRAY                5
  391. #define CSA_RGB                 6
  392. #define CSA_CMYK                7
  393. #define CSA_Lab                 8
  394. //
  395. // Parameter for CMGetInfo()
  396. //
  397. #define CMM_WIN_VERSION     0
  398. #define CMM_IDENT           1
  399. #define CMM_DRIVER_VERSION  2
  400. #define CMM_DLL_VERSION     3
  401. #define CMM_VERSION         4
  402. #define CMM_DESCRIPTION     5
  403. #define CMM_LOGOICON        6
  404. //
  405. // Parameter for CMTranslateRGBs()
  406. //
  407. #define CMS_FORWARD         0
  408. #define CMS_BACKWARD        1
  409. //
  410. //  Constants for SetupColorMatching()
  411. //
  412. #define COLOR_MATCH_VERSION  0x0200
  413. //
  414. //  Constants for flags
  415. //
  416. #define CMS_DISABLEICM          1     // Disable color matching
  417. #define CMS_ENABLEPROOFING      2     // Enable proofing
  418. #define CMS_SETRENDERINTENT     4     // Use passed in value
  419. #define CMS_SETPROOFINTENT      8
  420. #define CMS_SETMONITORPROFILE   0x10  // Use passed in profile name initially
  421. #define CMS_SETPRINTERPROFILE   0x20
  422. #define CMS_SETTARGETPROFILE    0x40
  423. #define CMS_USEHOOK             0x80  // Use hook procedure in lpfnHook
  424. #define CMS_USEAPPLYCALLBACK    0x100 // Use callback procedure when applied
  425. #define CMS_USEDESCRIPTION      0x200 // Use profile description in UI
  426.                                       //   (default is filename)
  427. #define CMS_DISABLEINTENT       0x400 // Disable intent selection (render & proofing) always
  428. #define CMS_DISABLERENDERINTENT 0x800 // Disable rendering intent selection while in proofing mode
  429.                                       // Only proofing intent selection is enabled.
  430. //
  431. //  Used to denote too-small buffers (output only)
  432. //
  433. #define CMS_MONITOROVERFLOW     0x80000000L
  434. #define CMS_PRINTEROVERFLOW     0x40000000L
  435. #define CMS_TARGETOVERFLOW      0x20000000L
  436. //
  437. //  Structures (both ANSI and Unicode)
  438. //
  439. struct _tagCOLORMATCHSETUPW;
  440. struct _tagCOLORMATCHSETUPA;
  441. typedef BOOL (WINAPI *PCMSCALLBACKW)(struct _tagCOLORMATCHSETUPW *,LPARAM);
  442. typedef BOOL (WINAPI *PCMSCALLBACKA)(struct _tagCOLORMATCHSETUPA *,LPARAM);
  443. typedef struct _tagCOLORMATCHSETUPW {
  444.     DWORD   dwSize;                 //  Size of structure in bytes
  445.     DWORD   dwVersion;              //  Set to COLOR_MATCH_VERSION
  446.     DWORD   dwFlags;                //  See constants listed previously
  447.     HWND    hwndOwner;              //  Window handle of owner
  448.     PCWSTR  pSourceName;            //  Name of Image Source, defaults to "sRGB Color Space"
  449.     PCWSTR  pDisplayName;           //  If null, defaults to first enumerated monitor
  450.     PCWSTR  pPrinterName;           //  If null, defaults to default printer.
  451.     DWORD   dwRenderIntent;         //  Rendering Intent
  452.     DWORD   dwProofingIntent;       //  Rendering Intent for Proofing
  453.     PWSTR   pMonitorProfile;        //  Monitor profile name
  454.     DWORD   ccMonitorProfile;       //  Size of above in characters
  455.     PWSTR   pPrinterProfile;        //  Printer profile name
  456.     DWORD   ccPrinterProfile;       //  Size of above in characters
  457.     PWSTR   pTargetProfile;         //  Target profile name
  458.     DWORD   ccTargetProfile;        //  Size of above in characters
  459.     DLGPROC lpfnHook;               //  Hook Procedure address
  460.     LPARAM  lParam;                 //  Given to hook procedure at WM_INITDIALOG
  461.     PCMSCALLBACKW lpfnApplyCallback;   //  Callback Procedure address when apply is pushed
  462.     LPARAM        lParamApplyCallback; //  Given to callback Procedure for apply
  463. }   COLORMATCHSETUPW, *PCOLORMATCHSETUPW, *LPCOLORMATCHSETUPW;
  464. typedef struct _tagCOLORMATCHSETUPA {
  465.     DWORD   dwSize;                 //  Size of structure in bytes
  466.     DWORD   dwVersion;              //  Set to COLOR_MATCH_VERSION
  467.     DWORD   dwFlags;                //  See constants listed previously
  468.     HWND    hwndOwner;              //  Window handle of owner
  469.     PCSTR   pSourceName;            //  Name of Image Source, defaults to  "This Document"
  470.     PCSTR   pDisplayName;           //  If null, defaults to first enumerated monitor
  471.     PCSTR   pPrinterName;           //  If null, defaults to default printer.
  472.     DWORD   dwRenderIntent;         //  Rendering Intent
  473.     DWORD   dwProofingIntent;       //  Rendering Intent for Proofing
  474.     PSTR    pMonitorProfile;        //  Monitor profile name
  475.     DWORD   ccMonitorProfile;       //  Size of above in characters
  476.     PSTR    pPrinterProfile;        //  Printer profile name
  477.     DWORD   ccPrinterProfile;       //  Size of above in characters
  478.     PSTR    pTargetProfile;         //  Target profile name
  479.     DWORD   ccTargetProfile;        //  Size of above in characters
  480.     DLGPROC lpfnHook;               //  Hook Procedure address
  481.     LPARAM  lParam;                 //  Given to hook procedure at WM_INITDIALOG
  482.     PCMSCALLBACKA lpfnApplyCallback;   //  Callback Procedure address when apply is pushed
  483.     LPARAM        lParamApplyCallback; //  Given to callback Procedure for apply
  484. }   COLORMATCHSETUPA, *PCOLORMATCHSETUPA, *LPCOLORMATCHSETUPA;
  485. //
  486. // Windows API definitions
  487. //
  488. HPROFILE   WINAPI OpenColorProfileA(PPROFILE, DWORD, DWORD, DWORD);
  489. HPROFILE   WINAPI OpenColorProfileW(PPROFILE, DWORD, DWORD, DWORD);
  490. BOOL       WINAPI CloseColorProfile(HPROFILE);
  491. BOOL       WINAPI GetColorProfileFromHandle(HPROFILE, PBYTE, PDWORD);
  492. BOOL       WINAPI IsColorProfileValid(HPROFILE, PBOOL);
  493. BOOL       WINAPI CreateProfileFromLogColorSpaceA(LPLOGCOLORSPACEA, PBYTE*);
  494. BOOL       WINAPI CreateProfileFromLogColorSpaceW(LPLOGCOLORSPACEW, PBYTE*);
  495. BOOL       WINAPI GetCountColorProfileElements(HPROFILE, PDWORD);
  496. BOOL       WINAPI GetColorProfileHeader(HPROFILE, PPROFILEHEADER);
  497. BOOL       WINAPI GetColorProfileElementTag(HPROFILE, DWORD, PTAGTYPE);
  498. BOOL       WINAPI IsColorProfileTagPresent(HPROFILE, TAGTYPE, PBOOL);
  499. BOOL       WINAPI GetColorProfileElement(HPROFILE, TAGTYPE, DWORD, PDWORD, PVOID, PBOOL);
  500. BOOL       WINAPI SetColorProfileHeader(HPROFILE, PPROFILEHEADER);
  501. BOOL       WINAPI SetColorProfileElementSize(HPROFILE, TAGTYPE, DWORD);
  502. BOOL       WINAPI SetColorProfileElement(HPROFILE, TAGTYPE, DWORD, PDWORD, PVOID);
  503. BOOL       WINAPI SetColorProfileElementReference(HPROFILE, TAGTYPE, TAGTYPE);
  504. BOOL       WINAPI GetPS2ColorSpaceArray (HPROFILE, DWORD, DWORD, PBYTE, PDWORD, PBOOL);
  505. BOOL       WINAPI GetPS2ColorRenderingIntent(HPROFILE, DWORD, PBYTE, PDWORD);
  506. BOOL       WINAPI GetPS2ColorRenderingDictionary(HPROFILE, DWORD, PBYTE, PDWORD, PBOOL);
  507. BOOL       WINAPI GetNamedProfileInfo(HPROFILE, PNAMED_PROFILE_INFO);
  508. BOOL       WINAPI ConvertColorNameToIndex(HPROFILE, PCOLOR_NAME, PDWORD, DWORD);
  509. BOOL       WINAPI ConvertIndexToColorName(HPROFILE, PDWORD, PCOLOR_NAME, DWORD);
  510. BOOL       WINAPI CreateDeviceLinkProfile(PHPROFILE, DWORD, PDWORD, DWORD, DWORD, PBYTE*, DWORD);
  511. HTRANSFORM WINAPI CreateColorTransformA(LPLOGCOLORSPACEA, HPROFILE, HPROFILE, DWORD);
  512. HTRANSFORM WINAPI CreateColorTransformW(LPLOGCOLORSPACEW, HPROFILE, HPROFILE, DWORD);
  513. HTRANSFORM WINAPI CreateMultiProfileTransform(PHPROFILE, DWORD, PDWORD, DWORD, DWORD, DWORD);
  514. BOOL       WINAPI DeleteColorTransform(HTRANSFORM);
  515. BOOL       WINAPI TranslateBitmapBits(HTRANSFORM, PVOID, BMFORMAT, DWORD, DWORD, DWORD, PVOID, BMFORMAT, DWORD, PBMCALLBACKFN, LPARAM);
  516. BOOL       WINAPI CheckBitmapBits(HTRANSFORM , PVOID, BMFORMAT, DWORD, DWORD, DWORD, PBYTE, PBMCALLBACKFN, LPARAM);
  517. BOOL       WINAPI TranslateColors(HTRANSFORM, PCOLOR, DWORD, COLORTYPE, PCOLOR, COLORTYPE);
  518. BOOL       WINAPI CheckColors(HTRANSFORM, PCOLOR, DWORD, COLORTYPE, PBYTE);
  519. DWORD      WINAPI GetCMMInfo(HTRANSFORM, DWORD);
  520. BOOL       WINAPI RegisterCMMA(PCSTR, DWORD, PCSTR);
  521. BOOL       WINAPI RegisterCMMW(PCWSTR, DWORD, PCWSTR);
  522. BOOL       WINAPI UnregisterCMMA(PCSTR, DWORD);
  523. BOOL       WINAPI UnregisterCMMW(PCWSTR, DWORD);
  524. BOOL       WINAPI SelectCMM(DWORD);
  525. BOOL       WINAPI GetColorDirectoryA(PCSTR, PSTR, PDWORD);
  526. BOOL       WINAPI GetColorDirectoryW(PCWSTR, PWSTR, PDWORD);
  527. BOOL       WINAPI InstallColorProfileA(PCSTR, PCSTR);
  528. BOOL       WINAPI InstallColorProfileW(PCWSTR, PCWSTR);
  529. BOOL       WINAPI UninstallColorProfileA(PCSTR, PCSTR, BOOL);
  530. BOOL       WINAPI UninstallColorProfileW(PCWSTR, PCWSTR, BOOL);
  531. BOOL       WINAPI EnumColorProfilesA(PCSTR, PENUMTYPEA, PBYTE, PDWORD, PDWORD);
  532. BOOL       WINAPI EnumColorProfilesW(PCWSTR, PENUMTYPEW, PBYTE, PDWORD, PDWORD);
  533. BOOL       WINAPI SetStandardColorSpaceProfileA(PCSTR, DWORD, PCSTR);
  534. BOOL       WINAPI SetStandardColorSpaceProfileW(PCWSTR, DWORD, PCWSTR);
  535. BOOL       WINAPI GetStandardColorSpaceProfileA(PCSTR, DWORD, PSTR, PDWORD);
  536. BOOL       WINAPI GetStandardColorSpaceProfileW(PCWSTR, DWORD, PWSTR, PDWORD);
  537. BOOL       WINAPI AssociateColorProfileWithDeviceA(PCSTR, PCSTR, PCSTR);
  538. BOOL       WINAPI AssociateColorProfileWithDeviceW(PCWSTR, PCWSTR, PCWSTR);
  539. BOOL       WINAPI DisassociateColorProfileFromDeviceA(PCSTR, PCSTR, PCSTR);
  540. BOOL       WINAPI DisassociateColorProfileFromDeviceW(PCWSTR, PCWSTR, PCWSTR);
  541. BOOL       WINAPI SetupColorMatchingW(PCOLORMATCHSETUPW pcms);
  542. BOOL       WINAPI SetupColorMatchingA(PCOLORMATCHSETUPA pcms);
  543. #ifdef UNICODE
  544. #define ENUMTYPE                            ENUMTYPEW
  545. #define PENUMTYPE                           PENUMTYPEW
  546. #define COLORMATCHSETUP                     COLORMATCHSETUPW
  547. #define PCOLORMATCHSETUP                    PCOLORMATCHSETUPW
  548. #define LPCOLORMATCHSETUP                   LPCOLORMATCHSETUPW
  549. #define PCMSCALLBACK                        PCMSCALLBACKW
  550. #define CreateColorTransform                CreateColorTransformW
  551. #define OpenColorProfile                    OpenColorProfileW
  552. #define CreateProfileFromLogColorSpace      CreateProfileFromLogColorSpaceW
  553. #define RegisterCMM                         RegisterCMMW
  554. #define UnregisterCMM                       UnregisterCMMW
  555. #define GetColorDirectory                   GetColorDirectoryW
  556. #define InstallColorProfile                 InstallColorProfileW
  557. #define UninstallColorProfile               UninstallColorProfileW
  558. #define AssociateColorProfileWithDevice     AssociateColorProfileWithDeviceW
  559. #define DisassociateColorProfileFromDevice  DisassociateColorProfileFromDeviceW
  560. #define EnumColorProfiles                   EnumColorProfilesW
  561. #define SetStandardColorSpaceProfile        SetStandardColorSpaceProfileW
  562. #define GetStandardColorSpaceProfile        GetStandardColorSpaceProfileW
  563. #define SetupColorMatching                  SetupColorMatchingW
  564. #else
  565. #define ENUMTYPE                            ENUMTYPEA
  566. #define PENUMTYPE                           PENUMTYPEA
  567. #define COLORMATCHSETUP                     COLORMATCHSETUPA
  568. #define PCOLORMATCHSETUP                    PCOLORMATCHSETUPA
  569. #define LPCOLORMATCHSETUP                   LPCOLORMATCHSETUPA
  570. #define PCMSCALLBACK                        PCMSCALLBACKA
  571. #define CreateColorTransform                CreateColorTransformA
  572. #define OpenColorProfile                    OpenColorProfileA
  573. #define CreateProfileFromLogColorSpace      CreateProfileFromLogColorSpaceA
  574. #define RegisterCMM                         RegisterCMMA
  575. #define UnregisterCMM                       UnregisterCMMA
  576. #define GetColorDirectory                   GetColorDirectoryA
  577. #define InstallColorProfile                 InstallColorProfileA
  578. #define UninstallColorProfile               UninstallColorProfileA
  579. #define AssociateColorProfileWithDevice     AssociateColorProfileWithDeviceA
  580. #define DisassociateColorProfileFromDevice  DisassociateColorProfileFromDeviceA
  581. #define EnumColorProfiles                   EnumColorProfilesA
  582. #define SetStandardColorSpaceProfile        SetStandardColorSpaceProfileA
  583. #define GetStandardColorSpaceProfile        GetStandardColorSpaceProfileA
  584. #define SetupColorMatching                  SetupColorMatchingA
  585. #endif  // !UNICODE
  586. //
  587. // Transform returned by CMM
  588. //
  589. typedef HANDLE  HCMTRANSFORM;
  590. //
  591. // Pointer to ICC color profile data.
  592. //
  593. typedef PVOID   LPDEVCHARACTER;
  594. //
  595. // CMM API definition
  596. //
  597. BOOL WINAPI CMCheckColors(
  598.     HCMTRANSFORM hcmTransform,  // transform handle
  599.     LPCOLOR lpaInputColors,     // array of COLORs
  600.     DWORD nColors,              // COLOR array size
  601.     COLORTYPE ctInput,          // input color type
  602.     LPBYTE lpaResult            // buffer for results
  603. );
  604. BOOL WINAPI CMCheckColorsInGamut(
  605.     HCMTRANSFORM hcmTransform,  // transform handle
  606.     RGBTRIPLE *lpaRGBTriple,    // RGB triple array
  607.     LPBYTE lpaResult,           // buffer for results
  608.     UINT nCount                 // result buffer size
  609. );
  610. BOOL WINAPI CMCheckRGBs(
  611.     HCMTRANSFORM hcmTransform,  // transform handle
  612.     LPVOID lpSrcBits,           // source bitmap bits
  613.     BMFORMAT bmInput,           // source bitmap format
  614.     DWORD dwWidth,              // source bitmap width
  615.     DWORD dwHeight,             // source bitmap hight
  616.     DWORD dwStride,             // source bitmap delta
  617.     LPBYTE lpaResult,           // buffer for results
  618.     PBMCALLBACKFN pfnCallback,  // pointer to callback function
  619.     LPARAM ulCallbackData       // caller-defined parameter to callback
  620. );
  621. BOOL WINAPI CMConvertColorNameToIndex(
  622.     HPROFILE hProfile,
  623.     PCOLOR_NAME paColorName,
  624.     PDWORD paIndex,
  625.     DWORD dwCount
  626. );
  627. BOOL WINAPI CMConvertIndexToColorName(
  628.     HPROFILE hProfile,
  629.     PDWORD paIndex,
  630.     PCOLOR_NAME paColorName,
  631.     DWORD dwCount
  632. );
  633. BOOL WINAPI CMCreateDeviceLinkProfile(
  634.     PHPROFILE pahProfiles,    // array of profile handles
  635.     DWORD nProfiles,          // profile handle array size
  636.     PDWORD padwIntents,       // array of rendering intents
  637.     DWORD nIntents,           // intent array size
  638.     DWORD dwFlags,            // transform creation flags
  639.     LPBYTE *lpProfileData     // pointer to pointer to buffer
  640. );
  641. HCMTRANSFORM WINAPI CMCreateMultiProfileTransform(
  642.     PHPROFILE pahProfiles,    // array of profile handles
  643.     DWORD nProfiles,          // profile handle array size
  644.     PDWORD padwIntents,       // array of rendering intents
  645.     DWORD nIntents,           // intent array size
  646.     DWORD dwFlags             // transform creation flags
  647. );
  648. BOOL WINAPI CMCreateProfile(
  649.     LPLOGCOLORSPACEA lpColorSpace,  // pointer to a logical color space
  650.     LPDEVCHARACTER *lpProfileData   // pointer to pointer to buffer
  651. );
  652. BOOL WINAPI CMCreateProfileW(
  653.     LPLOGCOLORSPACEW lpColorSpace,  // pointer to a logical color space
  654.     LPDEVCHARACTER *lpProfileData   // pointer to pointer to buffer
  655. );
  656. HCMTRANSFORM WINAPI CMCreateTransform(
  657.     LPLOGCOLORSPACEA lpColorSpace,       // pointer to logical color space
  658.     LPDEVCHARACTER lpDevCharacter,       // profile data
  659.     LPDEVCHARACTER lpTargetDevCharacter  // target profile data
  660. );
  661. HCMTRANSFORM WINAPI CMCreateTransformW(
  662.     LPLOGCOLORSPACEW lpColorSpace,       // pointer to logical color space
  663.     LPDEVCHARACTER lpDevCharacter,       // profile data
  664.     LPDEVCHARACTER lpTargetDevCharacter  // target profile data
  665. );
  666. HCMTRANSFORM WINAPI CMCreateTransformExt(
  667.     LPLOGCOLORSPACEA lpColorSpace,        // pointer to logical color space
  668.     LPDEVCHARACTER lpDevCharacter,        // profile data
  669.     LPDEVCHARACTER lpTargetDevCharacter,  // target profile data
  670.     DWORD dwFlags                         // creation flags
  671. );
  672. HCMTRANSFORM WINAPI CMCreateTransformExtW(
  673.     LPLOGCOLORSPACEW lpColorSpace,        // pointer to logical color space
  674.     LPDEVCHARACTER lpDevCharacter,        // profile data
  675.     LPDEVCHARACTER lpTargetDevCharacter,  // target profile data
  676.     DWORD dwFlags                         // creation flags
  677. );
  678. BOOL WINAPI CMDeleteTransform(
  679.     HCMTRANSFORM hcmTransform             // transform handle to be deleted.
  680. );
  681. DWORD WINAPI CMGetInfo(
  682.     DWORD dwInfo
  683. );
  684. BOOL WINAPI CMGetNamedProfileInfo(
  685.     HPROFILE hProfile,                    // profile handle
  686.     PNAMED_PROFILE_INFO pNamedProfileInfo // pointer to named profile info
  687. );
  688. BOOL WINAPI CMGetPS2ColorRenderingDictionary(
  689.     HPROFILE hProfile,
  690.     DWORD dwIntent,
  691.     LPBYTE lpBuffer,
  692.     LPDWORD lpcbSize,
  693.     LPBOOL lpbBinary
  694. );
  695. BOOL WINAPI CMGetPS2ColorRenderingIntent(
  696.     HPROFILE hProfile,
  697.     DWORD dwIntent,
  698.     LPBYTE lpBuffer,
  699.     LPDWORD lpcbSize
  700. );
  701. BOOL WINAPI CMGetPS2ColorSpaceArray(
  702.     HPROFILE hProfile,
  703.     DWORD dwIntent,
  704.     DWORD dwCSAType,
  705.     LPBYTE lpBuffer,
  706.     LPDWORD lpcbSize,
  707.     LPBOOL lpbBinary
  708. );
  709. BOOL WINAPI CMIsProfileValid(
  710.     HPROFILE hProfile,                  // proflle handle
  711.     LPBOOL lpbValid                     // buffer for result.
  712. );
  713. BOOL WINAPI CMTranslateColors(
  714.     HCMTRANSFORM hcmTransform,          // transform handle
  715.     LPCOLOR lpaInputColors,             // pointer to input color array
  716.     DWORD nColors,                      // number of color in color array
  717.     COLORTYPE ctInput,                  // input color type
  718.     LPCOLOR lpaOutputColors,            // pointer to output color array
  719.     COLORTYPE ctOutput                  // output color type
  720. );
  721. BOOL WINAPI CMTranslateRGB(
  722.     HCMTRANSFORM hcmTransform,
  723.     COLORREF ColorRef,
  724.     LPCOLORREF lpColorRef,
  725.     DWORD dwFlags
  726. );
  727. BOOL WINAPI CMTranslateRGBs(
  728.     HCMTRANSFORM hcmTransform,
  729.     LPVOID lpSrcBits,
  730.     BMFORMAT bmInput,
  731.     DWORD dwWidth,
  732.     DWORD dwHeight,
  733.     DWORD dwStride,
  734.     LPVOID lpDestBits,
  735.     BMFORMAT bmOutput,
  736.     DWORD dwTranslateDirection
  737. );
  738. BOOL WINAPI CMTranslateRGBsExt(
  739.     HCMTRANSFORM hcmTransform,
  740.     LPVOID lpSrcBits,
  741.     BMFORMAT bmInput,
  742.     DWORD dwWidth,
  743.     DWORD dwHeight,
  744.     DWORD dwInputStride,
  745.     LPVOID lpDestBits,
  746.     BMFORMAT bmOutput,
  747.     DWORD dwOutputStride,
  748.     LPBMCALLBACKFN lpfnCallback,
  749.     LPARAM ulCallbackData
  750. );
  751. #ifdef __cplusplus
  752. }
  753. #endif
  754. #endif  // ifndef _ICM_H_