PageRenderTime 19ms CodeModel.GetById 14ms app.highlight 2ms RepoModel.GetById 1ms app.codeStats 0ms

/src/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticities.h

https://bitbucket.org/cabalistic/ogredeps/
C++ Header | 120 lines | 20 code | 16 blank | 84 comment | 0 complexity | 91267b72f11106ed263423f632d3c866 MD5 | raw file
  1///////////////////////////////////////////////////////////////////////////
  2//
  3// Copyright (c) 2003, Industrial Light & Magic, a division of Lucas
  4// Digital Ltd. LLC
  5// 
  6// All rights reserved.
  7// 
  8// Redistribution and use in source and binary forms, with or without
  9// modification, are permitted provided that the following conditions are
 10// met:
 11// *       Redistributions of source code must retain the above copyright
 12// notice, this list of conditions and the following disclaimer.
 13// *       Redistributions in binary form must reproduce the above
 14// copyright notice, this list of conditions and the following disclaimer
 15// in the documentation and/or other materials provided with the
 16// distribution.
 17// *       Neither the name of Industrial Light & Magic nor the names of
 18// its contributors may be used to endorse or promote products derived
 19// from this software without specific prior written permission. 
 20// 
 21// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 22// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 23// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 24// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 25// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 26// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 27// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 28// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 29// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 30// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 31// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 32//
 33///////////////////////////////////////////////////////////////////////////
 34
 35
 36#ifndef INCLUDED_IMF_CHROMATICITIES_H
 37#define INCLUDED_IMF_CHROMATICITIES_H
 38
 39//-----------------------------------------------------------------------------
 40//
 41//	CIE (x,y) chromaticities, and conversions between
 42//	RGB tiples and CIE XYZ tristimulus values.
 43//
 44//-----------------------------------------------------------------------------
 45
 46#include "ImathVec.h"
 47#include "ImathMatrix.h"
 48
 49namespace Imf {
 50
 51   
 52struct Chromaticities
 53{
 54    //-----------------------------------------------
 55    // The CIE x and y coordinates of the RGB triples
 56    // (1,0,0), (0,1,0), (0,0,1) and (1,1,1).
 57    //-----------------------------------------------
 58
 59    Imath::V2f	red;
 60    Imath::V2f	green;
 61    Imath::V2f	blue;
 62    Imath::V2f	white;
 63
 64    //--------------------------------------------
 65    // Default constructor produces chromaticities
 66    // according to Rec. ITU-R BT.709-3
 67    //--------------------------------------------
 68
 69    Chromaticities (const Imath::V2f &red   = Imath::V2f (0.6400f, 0.3300f),
 70		    const Imath::V2f &green = Imath::V2f (0.3000f, 0.6000f),
 71		    const Imath::V2f &blue  = Imath::V2f (0.1500f, 0.0600f),
 72		    const Imath::V2f &white = Imath::V2f (0.3127f, 0.3290f));
 73};
 74
 75
 76//
 77// Conversions between RGB and CIE XYZ
 78//
 79// RGB to XYZ:
 80//
 81// 	Given a set of chromaticities, c, and the luminance, Y, of the RGB
 82// 	triple (1,1,1), or "white", RGBtoXYZ(c,Y) computes a matrix, M, so
 83// 	that multiplying an RGB value, v, with M produces an equivalent
 84// 	XYZ value, w.  (w == v * M)
 85// 
 86// 	If we define that
 87// 
 88// 	   (Xr, Yr, Zr) == (1, 0, 0) * M
 89// 	   (Xg, Yg, Zg) == (0, 1, 0) * M
 90// 	   (Xb, Yb, Zb) == (0, 0, 1) * M
 91// 	   (Xw, Yw, Zw) == (1, 1, 1) * M,
 92// 
 93// 	then the following statements are true:
 94// 
 95// 	   Xr / (Xr + Yr + Zr) == c.red.x
 96// 	   Yr / (Xr + Yr + Zr) == c.red.y
 97// 
 98// 	   Xg / (Xg + Yg + Zg) == c.red.x
 99// 	   Yg / (Xg + Yg + Zg) == c.red.y
100// 
101// 	   Xb / (Xb + Yb + Zb) == c.red.x
102// 	   Yb / (Xb + Yb + Zb) == c.red.y
103// 
104// 	   Xw / (Xw + Yw + Zw) == c.red.x
105// 	   Yw / (Xw + Yw + Zw) == c.red.y
106// 
107// 	   Yw == Y.
108// 
109// XYZ to RGB:
110// 
111// 	YYZtoRGB(c,Y) returns RGBtoXYZ(c,Y).inverse().
112// 
113
114Imath::M44f	RGBtoXYZ (const Chromaticities chroma, float Y);
115Imath::M44f	XYZtoRGB (const Chromaticities chroma, float Y);
116
117
118} // namespace Imf
119
120#endif