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)


⇐ вернуться назад | | далее ⇒