Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Формирование цветового массива


Автор: napTu3aH 5.6.2004, 17:05
В формате RGB нужно сформировать цветов эдак 200-500(чем больше тем лучше), которые бы визуально(на глаз) отличались бы друг от друга(пусть не сильно, но отличались). Кто нибудь сталкивался с аналогичной задачей?
А то неохота вручную перебирать.

Автор: cardinal 5.6.2004, 17:25
Цвета случайные имеются в виду или переливание из одного цвета в другой, потом опять в другой и т.д.?

Автор: napTu3aH 5.6.2004, 18:16
Без разницы, лишь бы цвета на глаз отличались.

Автор: cardinal 5.6.2004, 18:26
Все должны отличаться или только те которые рядом находятся?

Автор: napTu3aH 7.6.2004, 08:33
Все

Автор: cardinal 7.6.2004, 13:53
Цитата
нужно сформировать цветов эдак 200-500(чем больше тем лучше), которые бы визуально(на глаз) отличались бы друг от друга

Чем больше цветов, тем меньше они други от друга отличаются. 200 это уже не мало на мой взгляд и поэтому разница между оттенками будет невелика.

1. Объяви структуру PALETTE замером например в 216 (6*6*6), в которой будут сидеть твои цвета
2. Заполни эту структуру (как можешь сам поэкспериментировать smile.gif)

Самый просто способ это сделать цикл, который заполняет так

i = 0

x[i].rgbBlue = 255;
x[i].rgbGreen = 255;
x[i].rgbRed = 255;

i++;

x[i].rgbBlue = 205;
x[i].rgbGreen = 255;
x[i].rgbRed = 255;

i++;

x[i].rgbBlue = 155;
x[i].rgbGreen = 255;
x[i].rgbRed = 255;

i++;

x[i].rgbBlue = 105;
x[i].rgbGreen = 255;
x[i].rgbRed = 255;

i++;

x[i].rgbBlue = 55;
x[i].rgbGreen = 255;
x[i].rgbRed = 255;

i++;

x[i].rgbBlue = 5;
x[i].rgbGreen = 255;
x[i].rgbRed = 255;

i++;

x[i].rgbBlue = 255;
x[i].rgbGreen = 205;
x[i].rgbRed = 255;

i++;

x[i].rgbBlue = 205;
x[i].rgbGreen = 205;
x[i].rgbRed = 255;

i++;

x[i].rgbBlue = 155;
x[i].rgbGreen = 205;
x[i].rgbRed = 255;

и т.д. (до i = 215)

Вообщем вычитаешь из каналов цветов 50 (сначала из первого 5 раз, потом уменьшаешь на 50 второй канал и опять первый меняешь и т.д.). Получаешь таким образом 216 оттенков. Как они будут выглядеть не знаю. То есть примерно знаю, что многие на глаз не различить будет, поэтому и сказал, что сам можешь поэкспериментировать с заполнением каналов цветов. smile.gif

test.cpp
Код
// test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "test.h"

int main(int argc, char* argv[])
{
PALETTE x[216];

x[0].rgbBlue = 255;
x[0].rgbGreen = 255;
x[0].rgbRed = 255;

printf("Hello World!\n");
return 0;
}

test.h
Код
#ifndef _PALETTE_
#define _PALETTE_

typedef unsigned char       BYTE;

typedef struct tagPALETTE { // rgbq
   BYTE    rgbBlue;
   BYTE    rgbGreen;
   BYTE    rgbRed;
   BYTE    rgbReserved;
} PALETTE;
 
#endif


Надеюсь, что смог объяснить то, что пытался объяснить. smile.gif

Автор: LSD 8.6.2004, 18:57
Возьми цветовое пространство HSB раздели его скажем на 50 единиц по Hue и на 2 по Saturation и Brightness, и получишь заданное количество цветов, вопрос лишь в том как должны быть распределнны данные цвета.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)