SMIL  0.9.1
DColorConvert.h
1 /*
2  * Copyright (c) 2011-2016, Matthieu FAESSEL and ARMINES
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * * Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  * * Neither the name of Matthieu FAESSEL, or ARMINES nor the
14  * names of its contributors may be used to endorse or promote products
15  * derived from this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY
18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY
21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 
30 #ifndef _D_COLOR_CONVERT_H
31 #define _D_COLOR_CONVERT_H
32 
33 #include "Core/include/private/DImage.hxx"
34 #include "Core/include/DColor.h"
35 
36 #include "NSTypes/RGB/include/DRGB.h"
37 
38 namespace smil
39 {
40  RES_T RGBToXYZ(const Image<RGB> &imRgbIn, Image<RGB> &imXyzOut);
41  RES_T XYZToRGB(const Image<RGB> &imXyzIn, Image<RGB> &imRgbOut);
42  RES_T XYZToLAB(const Image<RGB> &imXyzIn, Image<RGB> &imLabOut);
43  RES_T LABToXYZ(const Image<RGB> &imLabIn, Image<RGB> &imXyzOut);
44  RES_T RGBToHLS(const Image<RGB> &imRgbIn, Image<RGB> &imHlsOut);
45  RES_T HLSToRGB(const Image<RGB> &imHlsIn, Image<RGB> &imRgbOut);
46  RES_T RGBToHSV(const Image<RGB> &imRgbIn, Image<RGB> &imHlsOut);
47 
48  RES_T RGBToLAB(const Image<RGB> &imRgbIn, Image<RGB> &imLabOut);
49  RES_T LABToRGB(const Image<RGB> &imLabIn, Image<RGB> &imRgbOut);
50 
51  template <class T>
52  RES_T RGBToLuminance(const Image<RGB> &imRgbIn, Image<T> &imLumOut)
53  {
54  ASSERT_ALLOCATED(&imRgbIn)
55  ASSERT_SAME_SIZE(&imRgbIn, &imLumOut)
56 
57  ImageFreezer freeze(imLumOut);
58 
59  ImDtTypes<UINT8>::lineType rArr = imRgbIn.getPixels().arrays[0];
60  ImDtTypes<UINT8>::lineType gArr = imRgbIn.getPixels().arrays[1];
61  ImDtTypes<UINT8>::lineType bArr = imRgbIn.getPixels().arrays[2];
62  typename ImDtTypes<T>::lineType outPixels = imLumOut.getPixels();
63 
64  size_t pixNbr = imRgbIn.getPixelCount();
65 
66  for (size_t i=0;i<pixNbr;i++)
67  {
68  outPixels[i] = T( 0.2126*rArr[i] + 0.7152*gArr[i] + 0.0722*bArr[i] );
69  }
70 
71  return RES_OK;
72  }
73 } // namespace smil
74 
75 #endif // _D_COLOR_CONVERT_H
76 
77 
Definition: DColorConvert.h:38