RGB颜色排列

问题描述:

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

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

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

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

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; 
+0

而第二个公式,如果没有被编译器优化,则要快得多。 – Dariusz 2013-04-04 06:43:41

你可以试试这个:

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 

} 

你可以使用:

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颜色的变化,然后随机...

+0

我没有看到随机化的要求。 “排列”听起来很直截了当。 – 2013-04-04 06:46:02