Шаг 218.
Библиотека Qt.
Примеры вывода растрового изображения

    На этом шаге рассмотрим примеры вывода растрового изображения.

    Объект класса QImage можно отобразить в контексте рисования методом QPainter::drawImage(). Перед тем как отобразить объект QImage на экране, метод drawImage() преобразует его в контекстно-зависимое представление (объект класса QPixmap). Приведем пример вывода изображения с позиции (0, 0) (рис. 1).


Рис.1. Пример вывода изображения в контексте рисования

QPainter painter(this);
QImage img("Snowleo.jpg");
painter.drawImage(0, 0, img);

    Файлы приложения можно взять здесь.

    Если необходимо вывести только часть растрового изображения, то необходимо указать эту часть в дополнительных параметрах метода drawImage(). Приведем пример отображения участка растрового изображения, задаваемого координатой (300, 0) и имеющей ширину равной 180, а высоту — 220 пикселам (рис. 2).


Рис.2. Пример вывода части изображения

QPainter painter(this);
QImage img("Snowleo.jpg");
painter.drawImage(50, 10, img, 300, 0, 180, 220);

    Файлы приложения можно взять здесь.

    Вызвав метод invertPixels() и передав в него значение QImage::InvertRgb, можно управлять инвертированием пикселов. А передача значения QImage::InvertRgba позволяет инвертировать не только пикселы, но и альфа-канал. Приведем пример реализации этой возможности, показанный на рис. 3.


Рис.3. Пример инвертирования пикселов

QPainter painter(this);
QImage img("Snowleo.jpg");
painter.drawImage(10, 10, img, 300, 0, 180, 220);
img.invertPixels(QImage::InvertRgb);
painter.drawImage(200, 10, img, 300, 0, 180, 220);

    Файлы приложения можно взять здесь.

    При помощи метода scaled() можно получить новое растровое изображение с измененными размерами. Действие флагов Qt::IgnoreAspectRatio и Qt::KeepAspectRatio, управляющих изменением размеров, рассмотрено в шаге 185. Приведем пример изменения размеров растрового изображения, показаный на рис. 4.


Рис.4. Пример изменения размера изображения

QPainter painter(this);
QImage img1("Snowleo.jpg");
painter.drawImage(0, 0, img1);
QImage img2 =
        img1.scaled(img1.width() / 2, img1.height(), Qt::IgnoreAspectRatio);
painter.drawImage(img1.width(), 0, img2);
QImage img3 =
        img1.scaled(img1.width(), img1.height() / 2, Qt::IgnoreAspectRatio);
painter.drawImage(0, img1.height(), img3);
QImage img4 =
        img1.scaled(img1.width() / 2, img1.height(), Qt::KeepAspectRatio);
painter.drawImage(img1.width(), img1.height(), img4);

    Файлы приложения можно взять здесь.

    Класс QImage предоставляет возможность горизонтального или вертикального отражения растрового изображения. Для этого в метод mirrored() необходимо передать два булевых значения, управляющих горизонтальным и вертикальным отражениями соответственно. Метод mirrored() не изменяет растровое изображение объекта, из которого он был вызван, а создает новое. Результат показан на рис. 5.


Рис.5. Пример отражения изображения

QPainter painter(this);
QImage img("Snowleo.jpg");
painter.drawImage(0, 0, img);
painter.drawImage(0, img.height(),img.mirrored(false, true));

    Файлы приложения можно взять здесь.

    На следующем шаге рассмотрим использование объекта класса QImage в качестве контекста рисования.




Предыдущий шаг Содержание Следующий шаг