CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  图形处理/算法

求:谁有RGB-HSB值互转换的算法?谢谢!!!

楼主vpro(IT_Boy)2003-02-01 14:21:13 在 VC/MFC / 图形处理/算法 提问

。。。 问题点数:0、回复次数:6Top

1 楼crazybit(bit狂)回复于 2003-02-02 13:33:55 得分 0

H(hue)   -   S(saturation)   -  
  B   ==   ???Top

2 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2003-02-04 10:11:16 得分 0

HSB=HSL  
  B(L):亮度Top

3 楼ehom(?!)回复于 2003-02-05 03:53:06 得分 0

HSB!=HSL,HSB=HSV(V或B是明度,不是亮度)  
   
  max=max(R,G,B)//取RGB中的最大值  
  min=min(R,G,B)//取RGB中的最小值  
       
  if   R   =   max,   H   =   (G-B)/(max-min)  
  if   G   =   max,   H   =   2   +   (B-R)/(max-min)  
  if   B   =   max,   H   =   4   +   (R-G)/(max-min)  
   
  H   =   H   *   60  
  if   H   <   0,   H   =   H   +   360  
   
  V=max(R,G,B)/256  
  S=(max-min)/max  
   
  H为角度数,S、B表示出来可化为百分数(乘100取整)!Top

4 楼bojinyu(沙鱼)回复于 2003-02-09 11:20:10 得分 0

//   Color.h:   interface   for   the   CColor   class.  
  //颜色类  
  //////////////////////////////////////////////////////////////////////  
   
  #if   !defined(AFX_COLOR_H__33D81BED_1B84_4313_B3B0_E2E83767792B__INCLUDED_)  
  #define   AFX_COLOR_H__33D81BED_1B84_4313_B3B0_E2E83767792B__INCLUDED_  
   
  #if   _MSC_VER   >   1000  
  #pragma   once  
  #endif   //   _MSC_VER   >   1000  
   
  typedef   enum    
  {  
  COLOR_RGB,  
  COLOR_HLS  
  }COLOR_FAMILY; //颜色空间  
   
  class   CColor      
  {  
  private:  
  typedef   enum{RED,GREEN,BLUE};  
  UCHAR   Value(DOUBLE   m1,DOUBLE   m2,DOUBLE   h)  
  {  
  while(h>360)  
  h-=360;  
  while(h<0)  
  h+=360;  
   
  if(h<60)  
  m1=m1+(m2-m1)*h/60;  
  else   if(h<180)  
  m1=m2;  
  else   if(h<240)  
  m1=m1+(m2-m1)*(240-h)/60;  
   
  return   (UCHAR)(m1*255);  
  }  
   
  public:  
  CColor();  
  virtual   ~CColor();  
  COLORREF   HLS2RGB(DOUBLE   Lightness,DOUBLE   Saturation,DOUBLE   Hue)  
  {  
  UCHAR   red,green,blue;  
  if(Saturation==0)  
  {  
  red=green=blue=(UCHAR)(Lightness*255);  
  }  
  else  
  {  
  DOUBLE   m1,m2;  
   
  if(Lightness<=0.5)  
  m2=Lightness*(1+Saturation);  
  else  
  m2=Lightness+Saturation*(1-Lightness);  
  m1=2*Lightness-m2;  
  red=Value(m1,m2,Hue+120);  
  green=Value(m1,m2,Hue);  
  blue=Value(m1,m2,Hue-120);  
  }  
  return   RGB(red,green,blue);  
  }  
   
  BOOL   RGB2HLS(COLORREF   RGBclr,DOUBLE   &Lightness,DOUBLE   &Saturation,DOUBLE   &Hue)  
  {  
  DOUBLE   mn,mx;  
  INT   major;  
  INT   Red,Green,Blue;  
   
  Red= RGBclr   &&   0x000000FF;  
  Green=( RGBclr   &&   0x0000FF00)>>8;  
  Blue=( RGBclr   &&   0x00FF0000)>>16;  
  if(Red<Green)  
  {  
  mn=Red;mx=Green;major=GREEN;  
  }  
  else  
  {  
  mn=Green;mx=Red;major=RED;  
  }  
  if(Blue<mn)  
  {  
  mn=Blue;  
  }  
  else  
  {  
  mx=Blue;major=BLUE;  
  }  
  if(mn==mx)  
  {  
  Lightness=mn/255;  
  Saturation=0;  
  Hue=0;  
  }  
  else  
  {  
  Lightness=(mn+mx)/510;  
  if(Lightness<=0.5)  
  {  
  Saturation=(mx-mn)/(mn+mx);  
  }  
  else  
  {  
  Saturation=(mx-mn)/(510-mn-mx);  
  }  
  switch(major)  
  {  
  case   RED:  
  Hue=(Green-Blue)*60/(mx-mn)+360;  
  break;  
  case   GREEN:  
  Hue=(Blue-Red)*60/(mx-mn)+120;  
  break;  
  case   BLUE:  
  Hue=(Red-Green)*60/(mx-mn)+240;  
  break;  
  }  
  if(Hue>360)   Hue=Hue-360;  
  }  
  }  
  };  
   
  #endif   //   !defined(AFX_COLOR_H__33D81BED_1B84_4313_B3B0_E2E83767792B__INCLUDED_)  
  Top

5 楼bojinyu(沙鱼)回复于 2003-02-09 11:22:46 得分 0

上面的写错了一点点  
   
  //   Color.h:   interface   for   the   CColor   class.  
  //颜色类  
  //////////////////////////////////////////////////////////////////////  
   
  #if   !defined(AFX_COLOR_H__33D81BED_1B84_4313_B3B0_E2E83767792B__INCLUDED_)  
  #define   AFX_COLOR_H__33D81BED_1B84_4313_B3B0_E2E83767792B__INCLUDED_  
   
  #if   _MSC_VER   >   1000  
  #pragma   once  
  #endif   //   _MSC_VER   >   1000  
   
  typedef   enum    
  {  
  COLOR_RGB,  
  COLOR_HLS  
  }COLOR_FAMILY; //颜色空间  
   
  class   CColor      
  {  
  private:  
  typedef   enum{RED,GREEN,BLUE};  
  UCHAR   Value(DOUBLE   m1,DOUBLE   m2,DOUBLE   h)  
  {  
  while(h>360)  
  h-=360;  
  while(h<0)  
  h+=360;  
   
  if(h<60)  
  m1=m1+(m2-m1)*h/60;  
  else   if(h<180)  
  m1=m2;  
  else   if(h<240)  
  m1=m1+(m2-m1)*(240-h)/60;  
   
  return   (UCHAR)(m1*255);  
  }  
   
  public:  
  CColor();  
  virtual   ~CColor();  
  COLORREF   HLS2RGB(DOUBLE   Lightness,DOUBLE   Saturation,DOUBLE   Hue)  
  {  
  UCHAR   red,green,blue;  
  if(Saturation==0)  
  {  
  red=green=blue=(UCHAR)(Lightness*255);  
  }  
  else  
  {  
  DOUBLE   m1,m2;  
   
  if(Lightness<=0.5)  
  m2=Lightness*(1+Saturation);  
  else  
  m2=Lightness+Saturation*(1-Lightness);  
  m1=2*Lightness-m2;  
  red=Value(m1,m2,Hue+120);  
  green=Value(m1,m2,Hue);  
  blue=Value(m1,m2,Hue-120);  
  }  
  return   RGB(red,green,blue);  
  }  
   
  BOOL   RGB2HLS(COLORREF   RGBclr,DOUBLE   &Lightness,DOUBLE   &Saturation,DOUBLE   &Hue)  
  {  
  DOUBLE   mn,mx;  
  INT   major;  
  INT   Red,Green,Blue;  
   
  Red= RGBclr   &   0x000000FF;  
  Green=( RGBclr   &   0x0000FF00)>>8;  
  Blue=( RGBclr   &   0x00FF0000)>>16;  
  if(Red<Green)  
  {  
  mn=Red;mx=Green;major=GREEN;  
  }  
  else  
  {  
  mn=Green;mx=Red;major=RED;  
  }  
  if(Blue<mn)  
  {  
  mn=Blue;  
  }  
  else  
  {  
  mx=Blue;major=BLUE;  
  }  
  if(mn==mx)  
  {  
  Lightness=mn/255;  
  Saturation=0;  
  Hue=0;  
  }  
  else  
  {  
  Lightness=(mn+mx)/510;  
  if(Lightness<=0.5)  
  {  
  Saturation=(mx-mn)/(mn+mx);  
  }  
  else  
  {  
  Saturation=(mx-mn)/(510-mn-mx);  
  }  
  switch(major)  
  {  
  case   RED:  
  Hue=(Green-Blue)*60/(mx-mn)+360;  
  break;  
  case   GREEN:  
  Hue=(Blue-Red)*60/(mx-mn)+120;  
  break;  
  case   BLUE:  
  Hue=(Red-Green)*60/(mx-mn)+240;  
  break;  
  }  
  if(Hue>360)   Hue=Hue-360;  
  }  
  }  
  };  
   
  #endif   //   !defined(AFX_COLOR_H__33D81BED_1B84_4313_B3B0_E2E83767792B__INCLUDED_)  
  Top

相关问题

  • RGB-HSB-CMYK-Lab转换算法,Photoshop Colorpicker实现方法,欢迎图形图像高手进来讨论!
  • 谁给我一个颜色转换的算法(RGB to 256color)
  • 谁知道色彩格式RGB与HSV的转换公式(算法也可)?
  • 求:RGB和HSL,YUV,YCbCr,Gamma等常用色系之间的转换算法.
  • 求:RGB和HSL,YUV,YCbCr,Gamma等常用色系之间的转换算法.
  • rgb和cmyk,还有hsb之间的转换
  • 请教关于java.awt.Color的HSB和RGB模型的转换
  • 急求HSB(HSV)转换为RGB的解决办法
  • 急求HSB(HSV)转换为RGB的解决办法
  • 如何将以下ASP算法转换成C#算法

关键词

  • hsb
  • hue
  • d81bed
  • rgb
  • ccolor
  • color
  • max
  • double m
  • afx
  • blue

得分解答快速导航

  • 帖主:vpro

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo