Readme.txt 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. ICC profile I/O library (icclib), README file
  2. Date 2001/6/3, Version 2.00
  3. This distribution contains source code which implements the reading and
  4. writing of color profile files that conform to the International Color
  5. Consortium (ICC) Profile Format Specification, Version 3.4.
  6. For more information about the ICC, and for copies of the specification,
  7. please refer to http://www.color.org/.
  8. (Note that this software is written from the ICC V3.4 standard, but the
  9. software and its author are not affiliated with, or otherwise connected
  10. with the ICC.)
  11. The ICC profile I/O library archive is kept at
  12. http://web.access.net.au/argyll/color.html
  13. Motivation
  14. Color is still very much a black art to many programmers dealing with
  15. computer graphics. The ICC Profile Format is an industry attempt to provide
  16. an interchange format to help solve the problems of specifying color, and
  17. in transferring color graphics from, and between systems and devices.
  18. Although the ICC format has been around a number of years, and has long
  19. been adopted by companies in the business of providing systems for
  20. publishing and printing, and is now widely used as part of commercial
  21. operating system support for device independent color, its uptake in the
  22. general world of computer graphics has been slow.
  23. The writing of this library was prompted by my private and professional
  24. enthusiasm for computer graphics, and color. Inspired by other examples of
  25. freely usable software (notably the Independent JPEG Group's free JPEG
  26. software, and Sam Leffler's TIFF library), I have decided to make this
  27. library available under similar terms. I hope that this library will
  28. provide a starting point for including ICC profile support more widely that
  29. is currently the case, particularly in open source code projects.
  30. Overview
  31. This package contains a C software implementation of the ICC Profile
  32. Format, Version 3.4. The ICC Profile Format attempts to provide a
  33. cross-platform device profile format, that can be used to translate color
  34. data created on one device into another device's native color space. For a
  35. fuller explanation of what the ICC Profile Format is all about, please
  36. refer to http://www.color.org, and the profile specification.
  37. In summary this library provides:
  38. * Full source code, free for commercial and non-commercial use.
  39. * Support for all version 3.4 header elements, Tags and Tag Types.
  40. * Conversion to/from machine native representation of all data
  41. types.
  42. * Support for user defined Tags.
  43. * Support for adding/deleting Tags.
  44. * Support for Tag type sharing within a file (often used for
  45. sharing LUTs amongst intents).
  46. * Support for reading/writing embedded profiles, including
  47. from/to a memory buffer, rather than a file.
  48. * Provides a single function for transforming color values through
  49. a profile, including support for intents, forward and reverse
  50. transforms, gamut lookup or preview lookup.
  51. * Provides support and code examples for creating all profile
  52. types, monochrome, matrix and Lut.
  53. * Attempts to be platform neutral.
  54. * Loads Tag Types on demand to conserve memory space.
  55. Changes from V1.30
  56. Change absolute conversion to be white point only, and use
  57. Bradford transform by default. (ie. we are now ignoring the
  58. comment in section 6.4.22 of the 1998 spec. about the
  59. media black point being used for absolute colorimetry,
  60. ignoring the recommendation on page 118 in section E.5,
  61. and are taking up the recommendation on page 124 in section
  62. E.16 that a more sophisticated chromatic adaption model be used.)
  63. This is for better compatibility with other CMM's, and to
  64. improve the results when using simple links between
  65. profiles with non-D50 white points. Standard profiles
  66. like sRGB will also be more accurate when interpreted
  67. with absolute colorimetric intent.
  68. This will cause some slight profile inaccuracy when used
  69. with profile created with previous versions of icclib.
  70. Added file I/O class to allow substitution of alternative ICC profile
  71. file access. Provide standard file class instance, and memory image
  72. instance of file I/O class as default and example.
  73. Added an optional new_icc_a() object creator, that takes a memory
  74. allocator class instance. This allows an alternate memory heap to
  75. be used with the icc class.
  76. Renamed object free() methods to del() for more consistency with new().
  77. Added ColorSync 2.5 specific VideoCardGamma tag support (from Neil Okamoto)
  78. Package contents:
  79. icclib.zip ZIP archive of the following files
  80. README This file.
  81. Licence.txt Important! - Permissions for use of this package.
  82. icc.c Library source file.
  83. icc.h Library include file. Note machine dependent defines. Includes
  84. icc34.h.
  85. icc34.h Lightly modified standard ICC header file.
  86. iccdump.c Program that dumps ASCII description of a profile.
  87. icclu.c Program that allows interactive or batch translation of color
  88. values though a profile.
  89. icctest.c Basic library tag Read/Write example and regression test code.
  90. lutest.c Color lookup regression test code, and example for creating
  91. color profiles.
  92. iccrw.c Source code skeleton for reading and then re-writing a profile.
  93. jamfile JAM style "makefile" see http://www.perforce.com/jam/jam.html
  94. makefile UNIX style makefile. Modify this to suite your system.
  95. Style
  96. For handling convenience, I have included all the library source code in
  97. two files. The down side is that they are both hard to read and navigate
  98. through. The code could do with some cleaning up and rearrangement, to make
  99. clear the distinction between public and private elements. (C++ would help
  100. here, but is less portable.) The code attempts to be ANSI C compliant,
  101. written in an object oriented style. Unfortunately, it has not been tested
  102. on a wide variety of platforms, nor with a very wide set of color profiles,
  103. so there my well be a number of bugs to discover. A tutorial on how to use
  104. the library would also be a good thing !
  105. The best way to learn how to use the library, is to take a look at
  106. icctest.c, lutest.c and iccrw.c. The first is used to test writing and
  107. reading to every type of element, with every possible variation of usage.
  108. You will need a copy of the ICC spec. handy to understand what it all
  109. means. The second source file specifically creates and then tests various
  110. types of profiles, including monochrome, matrix and Lut style profiles. The
  111. last is a source code skeleton, that reads a profile completely into
  112. memory, and then writes it out again to a different file.
  113. With the release of version 2.00 of icclib, the library is now as useful as
  114. it is likely to be, allowing convenient color conversion between PCS
  115. (profile connection spaces, either XYZ or Lab) and device specific color
  116. spaces. The library does not attempt to be a complete color management
  117. system however, lacking profile creation and linking functionality.
  118. (The Argyll CMS provides full CMS functionality.)
  119. I welcome feedback, positive or negative, so please mail me at
  120. GraemeGill@access.net.au
  121. Graeme Gill