}:

В листинге 10.1 приводится начало создаваемого нами класса RGBpixmap. Как принято в OpenGL, мы представляем пиксельную карту в форме простого массива пиксельных значений pixel, который хранится строка за строкой снизу вверх и вдоль каждой строки слева направо.

Листинг 10.1. Класс RGBpixmap для обработки RGB-изображений

class RGBpixmap{ private:

int nRows, nCols: // dimensions of the pixmap // размеры пиксельной карты

RGB* pixel; // array of pixels // массив пикселов public:

RGBpixmapO {nRows = nCols = 0; pixel = 0;}

RGBpixmapCint r. int c) //constructor // конструктор

{
nRows - r: nCols - c:
pixel " new RGB[r*c]:
}
void setPixeKint x. int y. RGB color) {

продолжение^

1 На самом деле в OpenGL предлагается несколько способов «упаковки» пиксельной карты в памяти. Мы работаем с самым обще употребительным форматом.

Средства для растровой графики

Листинг Ю.1 (продолжение)

if(x >- 0 && х < nCols && у >= 0 && у < nRowr) pixel[nCols * у + х] = color;

}
RGB getPixeKint x. int y) {

return pixel[nCols * у + x]:

}

//*** draw this pixmap at the current raster position //*** рисуем эту пиксельную карту в текущей растровой // позиции void draw(){

glDrawPi xels(nCol s. nRows. GL_RGB.
GLJJNSIGNED BYTE.pixel);
}
//*** read a rectangle of pixels into this pixmap

//*** считываем прямоугольник пикселов в эту пиксельную карту

void readdnt х. int у. int wid. int ht){

nRows - ht;
nCols - wid;
pixel = new RGB[nRows *nCols]; if(!pixel)exit(-l);
glReadPixels(x. y, nCols.
nRows.GL_RGB.GL_UNSIGNED_BYTE. pi xel);
}

//*** copy a region of the display back onto the display //*** копируем область, взятую с дисплея, обратно на дисплей void copy(int х, int у. int wid. int ht){ glCopyPixels(x. y. wid. ht. GL_COLOR);

}
//*** read BMP file into this pixmap

//*** считываем BMP-файл в эту пиксельную карту

int readBmpFile(char * fname):
//*** write this pixmap tD a BMP file

//*** записываем эту пиксельную карту в BMP-файл

void writeBmpFile(char * fname):
// …others …

// .. .другие функции …


⇐ Предыдущая| |Следующая ⇒