Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

plhsvconvert.cpp

Go to the documentation of this file.
00001 /*
00002 /--------------------------------------------------------------------
00003 |
00004 |      $Id: plhsvconvert.cpp,v 1.1 2004/05/21 21:02:53 maxx Exp $
00005 |
00006 |      Copyright (c) 1996-1998 Ulrich von Zadow
00007 |
00008 \--------------------------------------------------------------------
00009 */
00010 
00011 #include "plstdpch.h"
00012 #include "plhsvconvert.h"
00013 
00014 void fp_rgb_to_hsv (double *r,
00015                     double *g,
00016                     double *b)
00017 {
00018   int red, green, blue;
00019   double h=0, s, v;
00020   int min, max;
00021   int delta;
00022 
00023   red = (int)*r;
00024   green = (int)*g;
00025   blue = (int)*b;
00026 
00027   if (red > green)
00028     {
00029       if (red > blue)
00030         max = red;
00031       else
00032         max = blue;
00033 
00034       if (green < blue)
00035         min = green;
00036       else
00037         min = blue;
00038     }
00039   else
00040     {
00041       if (green > blue)
00042         max = green;
00043       else
00044         max = blue;
00045 
00046       if (red < blue)
00047         min = red;
00048       else
00049         min = blue;
00050     }
00051 
00052   v = max;
00053 
00054   if (max != 0)
00055     s = ((max - min) * 255) / (double) max;
00056   else
00057     s = 0;
00058 
00059   if (s == 0)
00060     h = 0;
00061   else
00062     {
00063       delta = max - min;
00064       if (red == max)
00065         h = (green - blue) / (double) delta;
00066       else if (green == max)
00067         h = 2 + (blue - red) / (double) delta;
00068       else if (blue == max)
00069         h = 4 + (red - green) / (double) delta;
00070       h *= 42.5;
00071 
00072       if (h < 0)
00073         h += 255;
00074       if (h > 255)
00075         h -= 255;
00076     }
00077 
00078   *r = h;
00079   *g = s;
00080   *b = v;
00081 }
00082 
00083 
00084 void fp_hsv_to_rgb (double *h,
00085                     double *s,
00086                     double *v)
00087 {
00088   double hue, saturation, value;
00089   double f, p, q, t;
00090 
00091   if (((int)*s) == 0)
00092     {
00093       *h = *v;
00094       *s = *v;
00095       *v = *v;
00096     }
00097   else
00098     {
00099       hue = *h * 6.0 / 255.0;
00100       saturation = *s / 255.0;
00101       value = *v / 255.0;
00102 
00103       f = hue - (int) hue;
00104       p = value * (1.0 - saturation);
00105       q = value * (1.0 - (saturation * f));
00106       t = value * (1.0 - (saturation * (1.0 - f)));
00107 
00108       switch ((int) hue)
00109         {
00110         case 0:
00111           *h = value * 255.0;
00112           *s = t * 255.0;
00113           *v = p * 255.0;
00114           break;
00115         case 1:
00116           *h = q * 255.0;
00117           *s = value * 255.0;
00118           *v = p * 255.0;
00119           break;
00120         case 2:
00121           *h = p * 255.0;
00122           *s = value * 255.0;
00123           *v = t * 255.0;
00124           break;
00125         case 3:
00126           *h = p * 255.0;
00127           *s = q * 255.0;
00128           *v = value * 255.0;
00129           break;
00130         case 4:
00131           *h = t * 255.0;
00132           *s = p * 255.0;
00133           *v = value * 255.0;
00134           break;
00135         case 5:
00136           *h = value * 255.0;
00137           *s = p * 255.0;
00138           *v = q * 255.0;
00139           break;
00140         }
00141     }
00142 }
00143 
00144 /*
00145 /--------------------------------------------------------------------
00146 |
00147 |      $Log: plhsvconvert.cpp,v $
00148 |      Revision 1.1  2004/05/21 21:02:53  maxx
00149 |      Initial Version of vuVolume, moderatly changed to make it compile on my windows and linux machine.
00150 |
00151 |      Revision 1.1  2002/11/13 01:59:48  mspindle
00152 |      *** empty log message ***
00153 |
00154 |      Revision 1.1  2001/09/16 19:03:23  uzadow
00155 |      Added global name prefix PL, changed most filenames.
00156 |
00157 |      Revision 1.1  2000/10/12 21:56:12  uzadow
00158 |      Moved local functions from VideoInvertFilter.cpp to
00159 |      hsvconvert.*
00160 |
00161 |
00162 |
00163 \--------------------------------------------------------------------
00164 */

Generated on Wed Dec 15 21:20:30 2004 for vuVolume by  doxygen 1.3.9.1