break; case 16:
glDrawPixels(width,height,GL_STENCIL_INDEX, GL_UNSIGNED_SHORT,inddata);
break; case 32:
glDrawPixels(width, height,GL_STENCIL_INDEX, GL_UNSIGNED_INT,inddata);
break; default:;
}
}
#endif
Файл fimage.h
Пример класса для обработки растрового изображения с поддержкой слоев и каналов.
#ifndef _Fimage_
#define _Fimage_ struct Fimage 1
int xlen,ylen; // размеры изображения int len; // xlen*ylen
vector<float*> channel; // массив каналов Fimage() {xlen=0;ylen=0;len=0;}
Fimage(int _xlen,int _ylen,int nc)
{init(_xlen,_ylen, nc) ; }
-Fimage(){clear();}
// инициализировать на nc каналов void init(int _xlen,int _ylen,int nc); void clear(); // освободить память // копировать один канал в другой void toch(int snc,int dnc)
{copy(channel[snc],channel[snc]+len,channel[dnc]) ; }
// копировать один rgb слой в другой void tochrgb(int rl,int gl,int Ы,
int r2,int g2,int b2)
{toch(rl,r2); toch(gl,g2); toch(bl,b2);}
// копировать один rgba слой в другой
void tochrgb(int rl,int gl,int bl,int al,
int r2,int g2,int b2,int a2)
{tochrgb(rl,gl,bl,r2,g2,b2); toch(al,a2);}
// заполнить канал, слой, void fill(int nc,float v)
{fill_n(channel[nc],len,v);> void fillrgb(int r,int g,int b,float v) f f i11(r,v); f i11(g,v); fill(b,v);} void fillrgba(int r,int g,int b,int a,float v)
(fillrgb(r,g,b,v); fill(a,v);}
// запись в различные каналы буфера цвета void tored(int nc); // вывести красный канал
void togreen(int nc); // вывести зеленый канал
void toblue(int nc); // вывести синий канал
void toalpha(int nc); // вывести альфа-канал
// вывести rgb изображение void torgb(int r=0,int g=l,int b=2)
(tored(r); togreen(g); toblue(b);}
// вывести rgba изображение
void torgba(int r=0,int g=l,int b=2,int a=3)
{torgb(r,g,b); toalpha(a);}
// преобразовать в монохромное изображение void tomono(int r=0,int g=l, int b=2);
// загрузить из памяти rgb изображение template<class T>
void loadrgb(T*src,int r=0,int g=l,int b=2);
// умножить все элементы на v void mul(float v,int nc)
{
Array2d tmp(xlen);
for_each(multiplies<float>(),v,xlen*ylen,
1,channel[nc],tmp);
void mulrgb(float v,int r=0,int g=l,int b=2) (mul(v,r); mul(v,g); mul(v,b);}
// добавить ко всем элементам v void add(float v, int nc)
{
Array2d tmp(xlen);
for_each(plus<float>() , v, xlen*ylen,
1,channel[nc],tmp);
}
void addrgb(float v, int r=0,int g=l,int b=2) {add(v,r); add(v,g); add(v,b);}
// фильтрация канала
void filter(int nc,int dstnc,float*m,int mien, float _div=0,float _add=0);
// фильтрация rgb слоя void filterrgb (int rl,int gl,int Ы, int r2,int g2,int b2, float*m,int mien,float _div=0, float _add=0)