ColorRamp.cpp
上传用户:hcfgz168
上传日期:2011-09-11
资源大小:116k
文件大小:3k
源码类别:

OpenGL

开发平台:

WINDOWS

  1. //********************************************
  2. // ColorRamp.cpp
  3. //********************************************
  4. // pierre.alliez@cnet.francetelecom.fr
  5. // Created : 19/05/98
  6. // Modified : 19/05/98
  7. //********************************************
  8. #include "stdafx.h"
  9. #include "ColorRamp.h"
  10. //********************************************
  11. // Constructor
  12. //********************************************
  13. CColorRamp::CColorRamp()
  14. {
  15. BuildDefault();
  16. }
  17. //********************************************
  18. // Destructor
  19. //********************************************
  20. CColorRamp::~CColorRamp()
  21. {
  22. }
  23. //********************************************
  24. // Build
  25. //********************************************
  26. int CColorRamp::Build()
  27. {
  28.  int x1,y1,x2,y2;
  29.  float a,b;
  30.  ASSERT(m_NbNode >= 2);
  31.  for(unsigned char k=0;k<3;k++)
  32.  for(int i=0;i<m_NbNode-1;i++)
  33.    {
  34.     x1 = (int)m_Node[i];
  35.     x2 = (int)m_Node[i+1];
  36.     ASSERT(x1<x2);
  37.     y1 = m_Color[k][x1];
  38.     y2 = m_Color[k][x2];
  39.     a = (float)(y2-y1) / (float)(x2-x1);
  40.     b = (float)y1 - a*(float)x1;
  41.     for(int j=x1;j<x2;j++)
  42.       m_Color[k][j]=(unsigned char)(a*(float)j+b);
  43.    }
  44. return 1;
  45. }
  46. //********************************************
  47. // Build
  48. //********************************************
  49. int CColorRamp::BuildNodes()
  50. {
  51. // Check first and last are set
  52. m_Color[3][0] = 1;
  53. m_Color[3][m_Size-1] = 1;
  54. // Count nodes
  55. m_NbNode = 0;
  56. for(int i=0;i<m_Size;i++)
  57. if(m_Color[3][i]==1)
  58. {
  59. m_Node[m_NbNode]=(unsigned char)i;
  60. m_NbNode++;
  61. }
  62. TRACE("NbNode : %dn",m_NbNode);
  63. ASSERT(m_NbNode>=2);
  64. return 1;
  65. }
  66. //********************************************
  67. // ResetNodes
  68. // Just first and last node
  69. //********************************************
  70. void CColorRamp::ResetNodes()
  71. {
  72. for(int i=0;i<m_Size;i++)
  73. m_Color[3][i] = 0;
  74. m_Color[3][0] = 1;
  75. m_Color[3][m_Size-1] = 1;
  76. BuildNodes();
  77. }
  78. //********************************************
  79. // BuildDefault
  80. // 256 grey levels
  81. //********************************************
  82. void CColorRamp::BuildDefault()
  83. {
  84. m_Size = 256;
  85. ResetNodes();
  86. // Grey scales
  87. for(unsigned char i=0;i<3;i++)
  88. {
  89. m_Color[i][0]=0;
  90. m_Color[i][255]=255;
  91. }
  92. Build();
  93. }
  94. //********************************************
  95. // BuildDefault
  96. // 256 grey levels
  97. //********************************************
  98. void CColorRamp::BuildRainbow()
  99. {
  100. m_Size = 256;
  101. ResetNodes();
  102. // Rainbow
  103. m_Color[3][0] = 1;m_Color[0][0] = 0;m_Color[1][0] = 0;m_Color[2][0] = 255;
  104. m_Color[3][48] = 1;m_Color[0][48] = 0;m_Color[1][48] = 254;m_Color[2][48] = 255;
  105. m_Color[3][96] = 1;m_Color[0][96] = 0;m_Color[1][96] = 254;m_Color[2][96] = 0;
  106. m_Color[3][144] = 1;m_Color[0][144] = 255;m_Color[1][144] = 255;m_Color[2][144] = 0;
  107. m_Color[3][192] = 1;m_Color[0][192] = 255;m_Color[1][192] = 126;m_Color[2][192] = 0;
  108. m_Color[3][240] = 1;m_Color[0][240] = 255;m_Color[1][240] = 0;m_Color[2][240] = 0;
  109. m_Color[3][255] = 1;m_Color[0][255] = 255;m_Color[1][255] = 255;m_Color[2][255] = 255;
  110. BuildNodes();
  111. Build();
  112. }
  113. //********************************************
  114. // Trace
  115. //********************************************
  116. void CColorRamp::Trace()
  117. {
  118. TRACE("Ramp (%d elts)n",m_Size);
  119. for(int i=0;i<m_Size;i++)
  120. {
  121. TRACE("  %3d %3d %3dn",m_Color[0][i],m_Color[1][i],m_Color[2][i]);
  122. }
  123. }
  124. //** EOF **