На этом шаге рассмотрим класс QPixmap.
Этот класс унаследован от класса контекста рисования QPaintDevice. Его определение находится в заголовочном файле QPixmap. Объекты класса содержат растровые изображения, не отображая их на экране. При необходимости этот класс можно использовать в качестве промежуточного буфера для рисования, т. е., если требуется нарисовать изображение, то его можно сначала нарисовать в объекте класса QPixmap, а потом, используя объект класса QPainter, скопировать в видимую область. Для создания объекта этого класса в его конструктор нужно передать ширину и высоту. Например:
QPixmap pix(320, 240);
Глубина цвета в создаваемом объекте класса QPixmap автоматически будет установлена в соответствии с актуальным значением графического режима. Это значение можно узнать с помощью метода QPixmap::defaultDepth(). Файл растрового изображения можно передать прямо в конструктор. Например:
QPixmap pix("Snowleo.jpg");
Класс QPixmap, как и QImage, предоставляет возможность загрузки данных в формате XPM прямо в конструктор:
#include "image_xpm.h" ... QPixmap pix(image_xpm);
Объекты класса QPixmap содержат не сами данные, а их идентификаторы, с помощью которых они могут обратиться к системе. Поэтому прямой доступ к каждому пикселу в отдельности будет очень медленным. В этом случае разумнее будет воспользоваться классом QImage.
В распоряжении класса QPainter имеются методы для сохранения и записи графических изображений — load() и save(). При проведении этих операций будет осуществляться промежуточное конвертирование из объекта класса QImage (или в него).
Объект класса QPixmap отображается в видимой области с помощью метода QPainter::drawPixmap(). Рассмотрим два разных варианта вызова метода drawPixmap(). В первом варианте указана только позиция, с которой нужно осуществить вывод. Во втором — вывод задается прямоугольной областью, в которой должно отображаться растровое изображение. Результат показан на рис. 1.
Рис.1. Разные способы отображения объекта класса QPixmap
QPainter painter(this); QPixmap pix("Snowleo.jpg"); painter.drawPixmap(0, 0, pix); QRect r(0, pix.height(), pix.width(), pix.height() / 2); painter.drawPixmap(r, pix);
Файлы приложения можно взять здесь.
На следующем шаге рассмотрим класс QPixmapCache.