Reference Implementation for iccMAX color profiles
C++ Shell Makefile C Batchfile M4
Latest commit ffc3a38 Dec 2, 2016 unknown -Cleanup of build projects
-Improve MCS examples
-Add ability to apply color xforms directly from tag
-Fix but with desctructor of CIccApplyCmm
Permalink
Failed to load latest commit information.
Build update osx support (#1) Oct 25, 2016
IccProfLib
IccXML Change version to 2.1.6 Nov 16, 2016
ReadMeFiles Initial REFIccMAX Repository Creation Sep 29, 2015
Testing
Tools -Cleanup of build projects Dec 2, 2016
.gitignore update osx support (#1) Oct 25, 2016
LICENSE.md improve markdown formatting Jul 4, 2016
Readme.md

Readme.md


RefIccMAX

Introduction

The RefIccMAX project provides an open source set of libraries and tools that allow for the interaction, manipulation, and application of iccMAX based color management profiles based on the iccMAX profile specification (http://www.color.org/iccmax.xalter) in addition to legacy ICC profiles defined by earlier ICC profile specifications (http://www.color.org/icc_specs2.xalter).

iccMAX is not intended as a replacement for legacy ICC.1 based profiles, the existing architecture, but as an extension or alternative where requirements cannot be fully met by ICC.1.  Some of the areas covered by iccMAX include: Multi-spectral, Medical Imaging, Image Capture/Digital Photography, Package Printing, Color Management on Internet, Fine Art, and Color Information Archiving.  A more fuller description of capabilities and functionality can be found on the ICC web site (http://www.color.org/iccmax.xalter).

Note: The code in RefIccMAX was initially based on the SampleICC (https://sourceforge.net/projects/sampleicc/) and IccXML (https://sourceforge.net/projects/iccxml/) open source projects, and therefore concepts, files and data structures within RefIccMAX  may have similarities (as well as various differences) to those in the SampleICC and IccXML projects.

Overview

Within the RefIccMAX project are several libraries and tools as follows:

·         Libraries that allow applications to interact with iccMAX profiles

o   IccProfLib – The RefIccMAX IccProfLib project represents an open source / cross platform “reference implementation” of a C++ library for reading/writing/applying/manipulating iccMAX color profiles defined by the iccMAX profile specification (http://www.color.org/iccmax.xalter).  Class and object interaction documentation for IccProfLib can be found at ().

§  Note 1: There are no intentional discrepancies between the RefIccMAX implementation and the iccMAX specification.  If any should occur then this should be brought to the attention of and resolved by the RefIccMAX project team within the Architecture Working Group of the ICC organization.

§  Note 2: Though SampleICC provides a sample implementation, it does NOT represent a “reference implementation” of ICC.1 color management. 

o   IccLibXML – The RefIccMax IccLibXML project contains a parallel C++ extension library (IccLibXML) which provides the ability to interact with the objects defined by IccProfLib using an XML representation thus allowing iccMAX profiles to be expressed as or created from text based XML files.  The IccLibXML project has a dependencies on the libxml  (http://www.xmlsoft.org/) project (which also has a dependency on iconv which must be separately installed under windows platforms). 

·         Tools based upon these libraries that allow for iccMAX profiles to be investigated, created, manipulated, and applied.  For command line arguments running the application without any arguments will display help information about command line options.

o   IccToXML is a cross platform command line tool that allows both legacy ICC and iccMAX profiles to be expressed using an XML representation.  This allows for profiles to be converted to a textual representation that can be directly edited using a text editor and then converted back to ICC/iccMAX profile formats using IccFromXML.

§  This tool is dependent upon the IccLibXML project as well as libXML and iconv.

o   IccFromXML is a cross platform command line tool that allows both legacy ICC and iccMAX profiles to be created from the same XML representation provided by IccToXML.  A schema for iccXML files is forthcoming but can be determined using the FromXML() and ToXML() member functions defined in IccLibXML.  The IccFromXML tool provides a simple direct method to create and manipulate iccMAX based profiles. 

§  This tool is dependent upon the IccLibXML project as well as libXML and iconv.

o   IccApplyNamedCmm is a cross platform command line tool that allows a sequence of legacy ICC and/or iccMAX profiles to be applied to colors defined in a text based input profile outputting the results to the console, and can be redirected to a output text file.  Example source text files can be found in Testing/ApplyDataFiles.  The IccApplyNamedCmm application provides a basis for testing various features of iccMAX.

o   IccApplyProfiles is a cross platform command line tool that allows a sequence of legacy and/or iccMAX profiles to a source TIFF image resulting in a destination TIFF image.  The final destination profile can optionally be embedded in the resulting TIFF image.

§  This tool has a dependency on the LibTIFF (http://www.libtiff.org/) project.

o   IccDumpProfile is a cross platform command line tool that allows information from a legacy ICC and or iccMAX profile to be output to the console.

o   IccRoundTrip is a cross platform command line tool that allows round trip colorimetric processing characteristics of rendering intent of a profile to be evaluated.  (Evaluation goes from device values to PCS to establish intial PCS values.  These are then coverted to device values and then PCS values for the first round trip.  Second round trip comparison then converts the second PCS values to device values to PCS values for campison to the second PCS values.

o   IccSpecSepToTiff is a cross platform command line tool that combines separate individual TIFF images associated with different spectral wavelengths into a single multi-sample per pixel TIFF image.  An iccMAX based profile can optionally be embedded in the resulting TIFF image. 

§  This tool has a dependency on the LibTIFF (http://www.libtiff.org/) project.

o   IccTiffDump is a cross platform command line tool that outputs header and embedded ICC profile information about a TIFF image to the console.  This tool has a dependency on the LibTIFF project.

§  This tool has a dependency on the LibTIFF (http://www.libtiff.org/) project.

o   RefIccLabsCMM provides a MacOS-X based Color Management Module that can be used within the ColorSync environment. 

§  Note: Many features of iccMAX based profiles are not accessable due to the limitation in support for only legacy ICC concepts within ColorSync.

o   wxProfileDump provies a wxWidgets based (https://www.wxwidgets.org/) GUI based legacy ICC and iccMAX profile inspector tool.  The code for this tool is based on wxWidgets 2.x, and is therefore dependent on this version of wxWidgets.  At present only Windows based testing has been performed on this (though wxWidgets is a cross-platform development environment).  A development effort to port this tool to the cross-platform QT development environment is greatly needed.

Example iccMAX Profiles

XML files are provided that can be used to create example iccMAX profiles.  The CreateAllProfiles.bat file uses the iccFromXML tool to create ICC profiles for eache of these XML files.  The XML files can be found in the following folders:

Calc

This folder contains profiles that demonstrate color modeling using the Calculator MultiProcessElement.  The srgbCalcTest profile exercises all specified calculator operations.

Display

This folder contains profiles that demonstrate spectral modeling of display profiles allowing for late binding of the observer using MultiProcessElements that are transformed at startup to colorimetry for the desired observer.

Encoding

This folder contains 3 channel encoding class profiles.  Both "name only" profiles as well as fully specified profiles are present.

Named

This folder contains named color profiles showcasing features such as tints, spectral reflectance, and fluorescence (with and with out sparse notation).

PCC

This folder contains various profiles that can be used to define Profile Connection Conditions (PCC).  All profiles are abstract profiles that  perform no operation to PCS values.  However, all profiles contain fully defined PCC tags that provide information that can be used to define rendering for various observers and illuminants.  Profiles that utilize both absolute colorimetry as well as Material Adjusted colorimetry are present.

SpecRef

This folder contains various profiles that convert data to/from/betweteen a spectral reflectance PCS.  The argbRef (AdobeRGB) and srgbRef (sRGB) convert RGB values to/from spectral reflectance.  RefDecC, RefDecH, and RefIncW are abstract spectral reflectance profiles that modify "chroma", "hue", and "lightness" of spectral reflectance values in a spectral reflectance PCS.  The argbRef, srgbRef, RefDecC, RefDecH, RefIncW profiles all estimate and/or manipulate spectral reflectance using Wpt based spectral estimation (see chapter 7 of http://scholarworks.rit.edu/theses/8789/ ).  Additionally, examples of 6 channel abridged spectral encoding is provided.

Project Build Considerations

Windows

The project solution BuildAll.sln file for the Visual Studio development IDE can be found in the ./Build/MSVC folder.  This references additional .vcproj files for the various libraries and applications provided by RefIccMAX.  Projects without any further dependencies should build and link correctly.  Both 32 and 64bit compile options are supported.    Some of the projects have further dependencies on third party libraries requiring that the SDK libraries are installed, and some system environment variables need to be set to correctly reference the include files and libraries.  (Note: Projects with additional dependencies may not correctly build if these libraries and environment variable are not set up before running Visual Studio).

The dependency on libxml2 and iconv by the IccLibXML library as well as the IccToXML and IccFromXML applications requires these SDK’s are accessible, and are referenced using the system environment variables LIBXML and ICONV.   64-bit versions of these SDK’s can be found on the gnome website (http://ftp.gnome.org/pub/GNOME/binaries/win64/dependencies/). For example:

ICONV=C:\DevLibs\iconv\iconv-1.9.2

LIBXML2=C:\DevLibs\libxml2\libxml2-2.7.8

The dependency on libtiff by the IccApplyProfiles, IccSpecSepToTiff, and IccTiffDump tools requires that the libtiff SDK is accessible, and is referenced using the system environment variables LIBTIFF_DLIB (debug library to use), LIBTIFF_INCLUDE, LIBTIFF_LIB (release library to use), and LIBTIFF_LIBDIR.  For example:

LIBTIFF_DLIB=libtiff.lib

LIBTIFF_INCLUDE=C:\DevLibs\libtiff\tiff-4.0.3\libtiff

LIBTIFF_LIB=libtiff.lib

LIBTIFF_LIBDIR=C:\DevLibs\libtiff\tiff-4.0.3\libtiff

The dependency on wxWidgets by the wxProfileDump tool requires that the wxWidgets SDK is accessible,  and is reference using the system environment variables WXWIN and WXVER. For example:

WXWIN=C:\DevLibs\WXWidgets\wxWidgets-2.8.11

WXVER=28

When the ICC_USE_EIGEN_SOLVER is defined in IccProfLibConf.h then the Calc element solv operator will be implementd using the Eigen math C++ template library (http://eigen.tuxfamily.org/index.php?title=Main_Page), and is referenced using the system environeent variable EIGEN.  Fore example:

EIGEN=C:\DevLibs\eigen\eigen-3.2.8

MacOS-X

XCODE projects can be found in each of the library and project folders that are presently supported for building on the MacOS-X platform. The file Build/XCode/BuildAll.sh contains a bash Terminal script that can be used to build all of the XCODE projects.  

Header files and binaries for the libtiff and libxml libraries need to be manually installed before the BuildAll.sh script is executed.  The libtiff header files need to be placed in the Build/XCode/libtiff folder (specified by the LibTifSetup.txt file in this folder).  The libxml header files need to be placed in the Build/XCode/libxml folder (specified by the LibXmlSetup.txt file in this folder).  (Note: Projects with additional dependencies may not correctly build if these folders not set up before running the BuildAll.sh script).

The BuildAll.sh script file will make a copy of the libIccProfLib.a and libIccXML.a library binaries into the Build/XCode/lib folder.  The libraries in Build/XCode/Lib are then referenced by the rest of the projects in RefIccMAX.  Executables for the various tools will be placed into the Testing folder after a successful run of BuildAll.sh.

Linux

TBD

License

The ICC Software License, Version 0.2


Copyright (c) 2003-2015 The International Color Consortium. All rights
reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in
   the documentation and/or other materials provided with the
   distribution.

3. In the absence of prior written permission, the names "ICC" and "The
   International Color Consortium" must not be used to imply that the
   ICC organization endorses or promotes products derived from this
   software.

THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED.  IN NO EVENT SHALL THE INTERNATIONAL COLOR CONSORTIUM OR
ITS CONTRIBUTING MEMBERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
====================================================================

This software consists of voluntary contributions made by many
individuals on behalf of the The International Color Consortium.


Membership in the ICC is encouraged when this software is used for
commercial purposes.

 
For more information on The International Color Consortium, please
see http://www.color.org/.