【问题标题】:RGB color permutationRGB 颜色排列
【发布时间】:2013-04-04 14:57:04
【问题描述】:

我将在我的openGL 应用程序中使用颜色选择。我想在创建每个对象时为其分配一个唯一的颜色代码。我的问题是如何排列RGB 颜色值。

我想要的是一个函数,它为每次调用返回一个唯一的RGB 颜色,以便我可以将它分配给对象。例如,第一个调用将返回一个RGB 颜色(1, 0, 0),下一个将有(2, 0, 0) 等等,直到它返回(255, 255, 255)

所以我的问题是如何实现该功能。我认为这个想法是使用排列,但我不知道如何开始。 c++中是否已经实现了置换功能?

【问题讨论】:

    标签: c++ opengl permutation


    【解决方案1】:

    请注意,RGB 值只是三个字节。您可以只使用简单的 int 值并从 1 (0x000001) 到 16777215 (0xffffff) 进行迭代。 RGB 值可以通过以下公式获取:

    unsigned char R = color % 256;
    unsigned char G = (color / 256) % 256;
    unsigned char B = (color / 65536) % 256;
    

    unsigned char R = (color & 0xff);
    unsigned char G = (color & 0xff00) >> 8;
    unsigned char B = (color & 0xff0000) >> 16;
    

    【讨论】:

    • 第二个公式,如果没有经过编译器优化,会快得多。
    【解决方案2】:

    你可以试试这个:

    colour function()
    {
     static int r=-1,g=0,b=0 ;
     r++;
     if(r == 256)
     {
         r=0;
         g++
         if(g == 256)
         {
           g=0;
           b++;
         }
     }
    
     if(r == 255 && g==255 && b==255)
     r=g=b=0;
    
      // return colour form by r,g and b combination
    
    }
    

    【讨论】:

      【解决方案3】:

      你可以使用:

      rgbArray[255][3];
      for (int r = 0; r < 255; ++r)
        rgbArray[r][0] = r;
      
      numSwaps = 100;
      for (int i = 0; i < numSwaps; ++i)
      {
       a = rand()%255;
       b = rand()%255;
       swap(rgbArray[a], rgbArray[b]);
      }
      

      当然,您可以扩展它以保存所有 RGB 颜色的变化,然后将其随机化...

      【讨论】:

      • 我没有看到随机化的要求。 “排列”对我来说听起来很直接。
      猜你喜欢
      • 2019-07-02
      • 2013-03-18
      • 2013-04-10
      • 2012-04-03
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      • 2018-06-16
      相关资源
      最近更新 更多