I. Простейшая генерация изображения
ДАННАЯ ИНФОРМАЦИЯ ВЗЯТА ИЗ ЖУРНАЛА ПРОГРАММИСТ №1 ЗА 2001 ГОД.
а) Точки, линии, окружности, кривые(сплайны)
Случайно распределяем некоторое колличество граффических примитивов-можно одинаковых, можно разных. Для лучшего эффекта
неплохо ещё менять толщину обьектов.
Например:
xtsize,ytsize - размеры текстуры по x и y.
pset - функция, рисующая точку в текстуре
int color; //цвет точки
for(int n=0;n255) a=255; //проверяем на переполнение
if(a<0) a=0;
texbuf[x+b]=a;
}
}
IV. Цветовые операции
a) Изменение насыщенности (яркости) R,G,B - значений.
После создания текстуры к ней нужно подобрать цветовую гамму, соответствующую задачам. Изменяя значение яркости, мы
контролируем цветонасыщенность изображения. Обычно применяется в конце генерация слоя, но бывают и исключения.
int d;
int rbright,gbright,bbright; //значения насыщенности
for(int n=0;n255) d=255; //проверяем на переполнение
texture[n]=d; //записываем в текстуру
d=texture[n+1]*gbright/100; // - // - G - значение
if(d>255) d=255;
texture[n+1]=d;
d=texture[n+2]*bbright/100; // - // - B - значение
if(d>255) d=255;
texture[n+2]=d;
}
б) Инверсия
Обычное инвертирование байт текстуры. При правельном использовании можно добиться потрясающих результатов. Например,
когда надо получить "какие-нибудь другие" цвета, а изменение нассыщенности (яркости) не особо помогает.
for(int n=0;n255) a=255; texture[n]=a;
где n - текущий байт
layer1 - основной слой
layer2 - текущий (только что созданный) слой
2) Вычитание с проверкой на переполнение
a=layer1[n]-layer2[n];
if(a<0) a=0; texture[n]=a;
3) Среднее значение
texture[n]=(layer1[n]+layer2[n])/2;
4) Логические операции (xor,or,and)
texture[n]=layer1[n]^layer2[n];
//^(xor) - можно заменить на | (or) или & (and)
5) Умножение
texture[n]=layer1[n]*layer2[n];
6) Максинг
if(layer1[n]>layer2[n]) texture[n]=layer1[n];
else texture[n]=layer2[n];
Все пример, приведённые здесь, написанны на C!