Hoyt's FORK of DemoIccMAX 2.1.17.hoyt
Documentation for Hoyt's FORK of DemoIccMAX
Loading...
Searching...
No Matches
IccMatrixMath.h
Go to the documentation of this file.
1/** @file
2 File: IccCmm.h
3
4 Contains: Header file for implementation of the CIccCmm class.
5
6 Version: V1
7
8 Copyright: (c) see ICC Software License
9*/
10
11/*
12 * The ICC Software License, Version 0.2
13 *
14 *
15 * Copyright (c) 2003-2012 The International Color Consortium. All rights
16 * reserved.
17 *
18 * Redistribution and use in source and binary forms, with or without
19 * modification, are permitted provided that the following conditions
20 * are met:
21 *
22 * 1. Redistributions of source code must retain the above copyright
23 * notice, this list of conditions and the following disclaimer.
24 *
25 * 2. Redistributions in binary form must reproduce the above copyright
26 * notice, this list of conditions and the following disclaimer in
27 * the documentation and/or other materials provided with the
28 * distribution.
29 *
30 * 3. In the absence of prior written permission, the names "ICC" and "The
31 * International Color Consortium" must not be used to imply that the
32 * ICC organization endorses or promotes products derived from this
33 * software.
34 *
35 *
36 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39 * DISCLAIMED. IN NO EVENT SHALL THE INTERNATIONAL COLOR CONSORTIUM OR
40 * ITS CONTRIBUTING MEMBERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47 * SUCH DAMAGE.
48 * ====================================================================
49 *
50 * This software consists of voluntary contributions made by many
51 * individuals on behalf of the The International Color Consortium.
52 *
53 *
54 * Membership in the ICC is encouraged when this software is used for
55 * commercial purposes.
56 *
57 *
58 * For more information on The International Color Consortium, please
59 * see <http://www.color.org/>.
60 *
61 *
62 */
63
64//////////////////////////////////////////////////////////////////////
65// HISTORY:
66//
67// -Initial implementation by Max Derhak 5-15-2003
68// -Added support for Monochrome ICC profile apply by Rohit Patil 12-03-2008
69// -Integrate changes for PCS adjustment by George Pawle 12-09-2008
70//
71//////////////////////////////////////////////////////////////////////
72
73#if !defined(_ICCMATRIXMATH_H)
74#define _ICCMATRIXMATH_H
75
76#include "IccProfile.h"
77
78#ifdef USEREFICCMAXNAMESPACE
79namespace refIccMAX {
80#endif
81
82#define icNearRange 0.000001
83#define ICCMTXSTEPDUMPFMT " %.8f"
84
85/**
86**************************************************************************
87* Type: Class
88*
89* Purpose:
90* Object for performing matrix/vector math
91**************************************************************************
92*/
94{
95public:
96 CIccMatrixMath(icUInt16Number nRows, icUInt16Number nCols, bool bInitIdentity=false);
98 virtual ~CIccMatrixMath();
99
100 virtual void VectorMult(icFloatNumber *pDst, const icFloatNumber *pSrc) const;
101 virtual icUInt16Number GetCols() const { return m_nCols; }
102 virtual icUInt16Number GetRows() const { return m_nRows; }
103
104 CIccMatrixMath *Mult(const CIccMatrixMath *matrix) const;
105
106 icFloatNumber RowSum(icUInt16Number nRow) const;
107
108 void VectorScale(const icFloatNumber *vec);
109 void Scale(icFloatNumber v);
110
111 icFloatNumber *entry(icUInt16Number nRow, icUInt16Number nCol=0) { return &m_vals[(int)nRow*m_nCols + nCol]; }
112 const icFloatNumber *entry(icUInt16Number nRow, icUInt16Number nCol=0) const { return &m_vals[(int)nRow*m_nCols + nCol]; }
113
114 virtual bool isIdentityMtx() const;
115
116 virtual void dumpMtx(std::string &str) const;
117
118 bool Invert();
119
120 bool SetRange(const icSpectralRange &from, const icSpectralRange &to);
121
122 static CIccMatrixMath* rangeMap(const icSpectralRange &from, const icSpectralRange &to); //Caller is responsible for deleting returned matrix
123
124protected:
127};
128
129#ifdef USEREFICCMAXNAMESPACE
130}
131#endif
132
133
134#endif //_ICCMATRIXMATH_H
float icFloatNumber
All floating point operations/variables in IccProfLib use the icFloatNumber data type.
Definition IccDefs.h:100
#define ICCPROFLIB_API
File: IccProfile.h.
Type: Class.
icFloatNumber * entry(icUInt16Number nRow, icUInt16Number nCol=0)
virtual icUInt16Number GetCols() const
icFloatNumber * m_vals
icUInt16Number m_nCols
virtual icUInt16Number GetRows() const
const icFloatNumber * entry(icUInt16Number nRow, icUInt16Number nCol=0) const
unsigned short icUInt16Number
spectral range