rgb2luv.cpp
Engine/source/core/util/rgb2luv.cpp
Namespaces:
namespace
Detailed Description
1 2//----------------------------------------------------------------------------- 3// Copyright (c) 2012 GarageGames, LLC 4// 5// Permission is hereby granted, free of charge, to any person obtaining a copy 6// of this software and associated documentation files (the "Software"), to 7// deal in the Software without restriction, including without limitation the 8// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 9// sell copies of the Software, and to permit persons to whom the Software is 10// furnished to do so, subject to the following conditions: 11// 12// The above copyright notice and this permission notice shall be included in 13// all copies or substantial portions of the Software. 14// 15// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21// IN THE SOFTWARE. 22//----------------------------------------------------------------------------- 23 24#include "platform/platform.h" 25#include "core/util/rgb2luv.h" 26 27#include "core/util/rgb2xyz.h" 28#include "math/mPoint3.h" 29#include "math/mPoint2.h" 30 31 32namespace ConvertRGB 33{ 34 35LinearColorF toLUV( const LinearColorF &rgbColor ) 36{ 37 static const Point3F scXYZLUVDot( 1.0f, 15.0f, 3.0f ); 38 static const Point2F sc49( 4.0f, 9.0f ); 39 40 LinearColorF xyzColor = ConvertRGB::toXYZ( rgbColor ); 41 42 const Point2F &xyz_xy = *((Point2F *)&xyzColor); 43 44 Point2F uvColor = sc49; 45 uvColor.convolve( xyz_xy ); 46 uvColor /= mDot( *(Point3F *)&xyzColor, scXYZLUVDot ); 47 48 return LinearColorF( uvColor.x, uvColor.y, xyzColor.green, rgbColor.alpha ); 49} 50 51LinearColorF toLUVScaled( const LinearColorF &rgbColor ) 52{ 53 LinearColorF luvColor = toLUV( rgbColor ); 54 luvColor.red /= 0.62f; 55 luvColor.green /= 0.62f; 56 return luvColor; 57} 58 59} 60