void n\yKeys(unsigned char key. int x. int y)
{
switch(key) {
case 'q': exit(O);
case 's': whichPic = 1 - whichPic: break: // switch pixmaps // переключаем пиксельные карты
case 'r': pic[0].read(0.0.200,200): break: // grab a piece // захватываем фрагмент }
gl utPostRedisplayO;
}
//««««««««««« main »»»»»»»»»»»»>
void main(int argc. char **argv)
{
glutlnitC&argc. argv):
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB):
gl utIni twi ndowSi ze(screenwi dth. screenHeight):
glutlnitwindowPositionOO. 30):
glutCreatewindowC'Experiment with images"): // «Экспериментируем с изображениями»
glutKeyboardFunc(myKeys):
glutMouseFunc(myMouse);
glutMotionFunc(mouseMove):
glutDisplayFunc(myDisplay):
glutReshapeFunc(myReshape):
glClearColor(0.9f. 0.9f, 0.9f. 0.0): // background color // цвет фона
glClear(GL_C0L0R_BUFFER_BIT):
pi c[0].readBmpFi1e("CokeCan2.bmp"): // make a pixmap // создаем пиксельную карту
pi с[1].readBmpFi1e("Mandri11.bmp"): // make another one // создаем еще одну
glutMainLoopO:
}
В листинге 10.2 приведено приложение, в котором класс pixmap используется для управления чтением и рисованием пиксельных карт с помощью мыши и клавиатуры. Экспериментирование с этой программой может быть весьма информативным. В начале работы подпрограммы создаются две пиксельные
10.2. Управление пиксельными картами карты Pic[0] и Pic[l], и в них загружаются два BMP-файла. Одно из этих изображений отображается в начальной растровой позиции. После щелчка левой кнопкой мыши рисование методом drawO осуществляется уже в позиции мыши. Если левая кнопка мыши удерживается в нажатом положении, то данная пиксельная карта рисуется снова и снова по мере движения мыши по экранному окну. Нажатие клавиши «s» осуществляет переключение между двумя рисуемыми таким способом пиксельными картами. При нажатии клавиши «г» осуществляется чтение методом read О всего, что нарисовано в области экрана размером 200 на 200 пикселов; эти данные помещаются.в массив pic[0], стирая его прежнее содержимое. По нажатию правой кнопки мыши экран очищается.