color.h
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:2k
源码类别:

OpenGL

开发平台:

Visual C++

  1. // color.h
  2. //
  3. // Copyright (C) 2001, Chris Laurel <claurel@shatters.net>
  4. //
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the GNU General Public License
  7. // as published by the Free Software Foundation; either version 2
  8. // of the License, or (at your option) any later version.
  9. #ifndef _CELUTIL_COLOR_H_
  10. #define _CELUTIL_COLOR_H_
  11. #include <map>
  12. #include <string>
  13. class Color
  14. {
  15.  public:
  16.     Color();
  17.     Color(float, float, float);
  18.     Color(float, float, float, float);
  19.     Color(unsigned char, unsigned char, unsigned char);
  20.     Color(const Color&, float);
  21.     enum {
  22.         Red    = 0,
  23.         Green  = 1,
  24.         Blue   = 2,
  25.         Alpha  = 3
  26.     };
  27.     inline float red() const;
  28.     inline float green() const;
  29.     inline float blue() const;
  30.     inline float alpha() const;
  31.     inline void get(unsigned char*) const;
  32.  
  33.     friend bool operator==(Color, Color);
  34.     friend bool operator!=(Color, Color);
  35.     friend Color operator*(Color, Color);
  36.     static const Color Black;
  37.     static const Color White;
  38.     static bool parse(const char*, Color&);
  39.  private:
  40.     static void buildX11ColorMap();
  41.  private:
  42.     unsigned char c[4];
  43.     typedef std::map<const std::string, Color> ColorMap;
  44.     static ColorMap x11Colors;
  45. };
  46. float Color::red() const
  47. {
  48.     return c[Red] * (1.0f / 255.0f);
  49. }
  50. float Color::green() const
  51. {
  52.     return c[Green] * (1.0f / 255.0f);
  53. }
  54. float Color::blue() const
  55. {
  56.     return c[Blue] * (1.0f / 255.0f);
  57. }
  58. float Color::alpha() const
  59. {
  60.     return c[Alpha] * (1.0f / 255.0f);
  61. }
  62. void Color::get(unsigned char* rgba) const
  63. {
  64.     rgba[0] = c[Red];
  65.     rgba[1] = c[Green];
  66.     rgba[2] = c[Blue];
  67.     rgba[3] = c[Alpha];
  68. }
  69. inline bool operator==(Color a, Color b)
  70. {
  71.     return (a.c[0] == b.c[2] && a.c[1] == b.c[1] &&
  72.             a.c[2] == b.c[2] && a.c[3] == b.c[3]);
  73. }
  74. inline bool operator!=(Color a, Color b)
  75. {
  76.     return !(a == b);
  77. }
  78. inline Color operator*(Color a, Color b)
  79. {
  80.     return Color(a.red() * b.red(),
  81.                  a.green() * b.green(),
  82.                  a.blue() * b.blue(),
  83.                  a.alpha() * b.alpha());
  84. }
  85. #endif // _CELUTIL_COLOR_H_