}:

В листинге эскизно представлено несколько методов. Конструктор по умолчанию RGBpixmap создает пустую пиксельную карту, а другой конструктор создает пиксельную карту с г строками и с столбцами. Методы setPixel О и getPixel О соответственно задают и считывают определенное значение пиксела. Методы drawO, readO, соруО реализуются непосредственно в терминах функций OpenGL: О draw() копирует пиксельную карту в буфер кадров, помещая нижний левый угол этой карты в «текущую растровую позицию» - это переменная величина, которая может быть установлена с помощью подпрограммы glRasterPos2i(x, у).

О read О производит копирование в другом направлении - из прямоугольной области буфера кадров в пиксельную карту. Нижний левый угол этой области находится в точке pt, а параметры wid и ht определяют соответственно ширину и высоту области. Оператор readO выделяет память, необходимую для хранения всех пикселов, а подпрограмма glReadPixelsO производит текущее копирование.

10.2. Управление пиксельными картами О сору() копирует одну область буфера кадров в другую, эффективно выполняя те же операции, что и обе функции readO и drawO, однако без создания промежуточной пиксельной карты. Нижний левый угол области лежит в точке (х, у), а его размер определяется значениями w1d и ht. Эта область копируется в новую позицию буфера кадров, нижний левый угол которой лежит в текущей растровой позиции. Эта одна из форм операции «bitBLT», которую мы рассмотрим в разделе 10.3.4 «Операция BitBLT».

Подпрограммы readBmpFileO и writeBmpFileO упрощают создание и сохранение пиксельных карт. Подпрограмма readBmpFileO считывает изображение, записанное в BMP-файле, в пиксельную карту, выделяя необходимое количество памяти. Подпрограмма writeBmpFileO создает BMP-файл, который содержит пиксельную карту. Коды обеих этих функций приводятся в приложении В.

Класс RGBpixmap является простым и в то же время достаточно мощным. В следующем примере мы покажем, как использовать этот класс.

Пример 10.2.1. Испытательный стенд для манипулирования с пиксельными картами


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