145 lines
6.4 KiB
Plaintext
Executable File
145 lines
6.4 KiB
Plaintext
Executable File
ICC profile I/O library (icclib), README file
|
|
---------------------------------------------
|
|
|
|
This version is part of ArgyllCMS
|
|
|
|
-------------------------------------------
|
|
|
|
Date 22 September 2013, Version 2.15
|
|
|
|
This distribution contains source code which implements the reading and
|
|
writing of color profile files that conform to the International Color
|
|
Consortium (ICC) Profile Format Specification, Version 3.4.
|
|
|
|
For more information about the ICC, and for copies of the specification,
|
|
please refer to <http://www.color.org/>
|
|
|
|
(Note that this software is written from the ICC V3.4 standard, but the
|
|
software and its author are not affiliated with, or otherwise connected
|
|
with the ICC.)
|
|
|
|
The ICC profile I/O library archive is kept at <http://www.argyllcms.com/>
|
|
|
|
Motivation
|
|
|
|
Color is still very much a black art to many programmers dealing with
|
|
computer graphics. The ICC Profile Format is an industry attempt to provide
|
|
an interchange format to help solve the problems of specifying color, and
|
|
in transferring color graphics from, and between systems and devices.
|
|
Although the ICC format has been around a number of years, and has long
|
|
been adopted by companies in the business of providing systems for
|
|
publishing and printing, and is now widely used as part of commercial
|
|
operating system support for device independent color, its uptake in the
|
|
general world of computer graphics has been slow.
|
|
|
|
The writing of this library was prompted by my private and professional
|
|
enthusiasm for computer graphics, and color. Inspired by other examples of
|
|
freely usable software (notably the Independent JPEG Group's free JPEG
|
|
software, and Sam Leffler's TIFF library), I have decided to make this
|
|
library available under similar terms. I hope that this library will
|
|
provide a starting point for including ICC profile support more widely that
|
|
is currently the case, particularly in open source code projects.
|
|
|
|
Overview
|
|
|
|
This package contains a C software implementation of the ICC Profile
|
|
Format, Version 3.4. The ICC Profile Format attempts to provide a
|
|
cross-platform device profile format, that can be used to translate color
|
|
data created on one device into another device's native color space. For a
|
|
fuller explanation of what the ICC Profile Format is all about, please
|
|
refer to http://www.color.org, and the profile specification.
|
|
|
|
In summary this library provides:
|
|
|
|
* Full source code, free for commercial and non-commercial use.
|
|
* Support for all version 3.4 header elements, Tags and Tag Types.
|
|
* Conversion to/from machine native representation of all data
|
|
types.
|
|
* Support for user defined Tags.
|
|
* Support for adding/deleting Tags.
|
|
* Support for Tag type sharing within a file (often used for
|
|
sharing LUTs amongst intents).
|
|
* Support for reading/writing embedded profiles, including from/to
|
|
a memory buffer, rather than a file.
|
|
* Provides a single function for transforming color values through
|
|
a profile, including support for intents, forward and reverse
|
|
transforms, gamut lookup or preview lookup.
|
|
* Provides support and code examples for creating all profile
|
|
types, monochrome, matrix and Lut.
|
|
* Attempts to be platform neutral, and flexibility in its use of
|
|
system file and memory sub-systems.
|
|
* Loads Tag Types on demand to conserve memory space.
|
|
|
|
Package contents:
|
|
|
|
icclib.zip ZIP archive of the following files
|
|
README.txt This file.
|
|
License4.txt Important! - Permissions for use of this package.
|
|
icc.c Library source file.
|
|
iccstd.c Library source that uses stdio and malloc system calls.
|
|
|
|
icc.h Library include file. Note machine dependent defines.
|
|
Includes iccV42.h.
|
|
iccV42.h Standard ICC header file modified up to Version 4.2 spec.
|
|
iccdump.c Program that dumps ASCII description of a profile.
|
|
|
|
icclu.c Program that allows interactive or batch translation of
|
|
color values though a profile.
|
|
|
|
icctest.c Basic library tag Read/Write example and regression test
|
|
code.
|
|
|
|
lutest.c Color lookup regression test code, and example for creating
|
|
color profiles.
|
|
|
|
iccrw.c Source code skeleton for reading and then re-writing a
|
|
profile.
|
|
|
|
Jamfile JAM style "makefile" see
|
|
http://www.perforce.com/jam/jam.html
|
|
|
|
Makefile Generic style makefile. Edit this to select the appropriate
|
|
system makefile rules.
|
|
Makefile.IBMNTMakefile ruleset for Windows NT using the IBM compiler.
|
|
Makefile.OSX Makefile ruleset for Mac OSX environment.
|
|
Makefile.UNIX Makefile ruleset for Linux style environment.
|
|
|
|
Makefile.WNT Makefile ruleset for Windows NT using the Microsoft Visual
|
|
C++ compiler.
|
|
|
|
Style
|
|
|
|
For handling convenience, I have included all the library source code in
|
|
two files. The down side is that they are both hard to read and navigate
|
|
through. The code could do with some cleaning up and rearrangement, to make
|
|
clear the distinction between public and private elements. (C++ would help
|
|
here, but is less portable.) The code attempts to be ANSI C compliant,
|
|
written in an object oriented style. A tutorial on how to use the library
|
|
would also be a good thing !
|
|
|
|
The best way to learn how to use the library, is to take a look at
|
|
icctest.c, lutest.c and iccrw.c. The first is used to test writing and
|
|
reading to every type of element, with every possible variation of usage.
|
|
You will need a copy of the ICC spec. handy to understand what it all
|
|
means. The second source file specifically creates and then tests various
|
|
types of profiles, including monochrome, matrix and Lut style profiles. The
|
|
last is a source code skeleton, that reads a profile completely into
|
|
memory, and then writes it out again to a different file.
|
|
|
|
With the release of version 2.00 of icclib, the library is now as useful as
|
|
it is likely to be, allowing convenient color conversion between PCS
|
|
(profile connection spaces, either XYZ or Lab) and device specific color
|
|
spaces. The library does not attempt to be a complete color management
|
|
system however, lacking profile creation and linking functionality. Icclib
|
|
is part of the Argyll CMS, which does attempt to be a complete color
|
|
management system. Argyll can be used as a more realistic example of the
|
|
use of icclib. I plan at some stage to upgrade icclib to be compatible with
|
|
the recently released ICC V4 spec., but will probably get around to this
|
|
sometime after the next major release of Argyll.
|
|
|
|
I welcome feedback, positive or negative, so please mail me at
|
|
|
|
Graeme at argyllcms dot com
|
|
|
|
Graeme Gill
|