diff -r d8fccb2cd802 -r 468f4c8d3d5b Orb/Doxygen/src/image.cpp --- a/Orb/Doxygen/src/image.cpp Fri Apr 23 20:47:58 2010 +0100 +++ b/Orb/Doxygen/src/image.cpp Wed Aug 11 14:49:30 2010 +0100 @@ -3,7 +3,7 @@ * * * - * Copyright (C) 1997-2008 by Dimitri van Heesch. + * Copyright (C) 1997-2010 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -20,7 +20,9 @@ #include "image.h" //#include "gifenc.h" #include +#include #include "lodepng.h" +#include "config.h" typedef unsigned char Byte; @@ -209,6 +211,33 @@ Image::Image(int w,int h) { + static int hue = Config_getInt("HTML_COLORSTYLE_HUE"); + static int sat = Config_getInt("HTML_COLORSTYLE_SAT"); + static int gamma = Config_getInt("HTML_COLORSTYLE_GAMMA"); + + double red1,green1,blue1; + double red2,green2,blue2; + + ColoredImage::hsl2rgb(hue/360.0, // hue + sat/255.0, // saturation + pow(235/255.0,gamma/100.0), // luma (gamma corrected) + &red1,&green1,&blue1 + ); + + ColoredImage::hsl2rgb(hue/360.0, // hue + sat/255.0, // saturation + pow(138/255.0,gamma/100.0), // luma (gamma corrected) + &red2,&green2,&blue2 + ); + + palette[2].red = (int)(red1 * 255.0); + palette[2].green = (int)(green1 * 255.0); + palette[2].blue = (int)(blue1 * 255.0); + + palette[3].red = (int)(red2 * 255.0); + palette[3].green = (int)(green2 * 255.0); + palette[3].blue = (int)(blue2 * 255.0); + data = new uchar[w*h]; memset(data,0,w*h); width = w; @@ -393,3 +422,118 @@ return TRUE; } +//---------------------------------------------------------------- + +void ColoredImage::hsl2rgb(double h,double s,double l, + double *pRed,double *pGreen,double *pBlue) +{ + double v; + double r,g,b; + + r = l; // default to gray + g = l; + b = l; + v = (l <= 0.5) ? (l * (1.0 + s)) : (l + s - l * s); + if (v > 0) + { + double m; + double sv; + int sextant; + double fract, vsf, mid1, mid2; + + m = l + l - v; + sv = (v - m ) / v; + h *= 6.0; + sextant = (int)h; + fract = h - sextant; + vsf = v * sv * fract; + mid1 = m + vsf; + mid2 = v - vsf; + switch (sextant) + { + case 0: + r = v; + g = mid1; + b = m; + break; + case 1: + r = mid2; + g = v; + b = m; + break; + case 2: + r = m; + g = v; + b = mid1; + break; + case 3: + r = m; + g = mid2; + b = v; + break; + case 4: + r = mid1; + g = m; + b = v; + break; + case 5: + r = v; + g = m; + b = mid2; + break; + } + } + *pRed = r; + *pGreen = g; + *pBlue = b; +} + +ColoredImage::ColoredImage(int width,int height, + const uchar *greyLevels,const uchar *alphaLevels, + int saturation,int hue,int gamma) +{ + m_hasAlpha = alphaLevels!=0; + m_width = width; + m_height = height; + m_data = (uchar*)malloc(width*height*4); + int i; + for (i=0;i