На этом шаге рассмотрим класс QImage.
Класс QImage является основным классом для контекстно-независимого представления растровых изображений. Этот класс унаследован от класса контекста рисования QPaintDevice, что позволяет использовать все методы рисования, определенные в классе QPainter.
Класс QImage предоставляет поддержку для форматов, указанных в табл. 1.
Растровое изображение недействительно | |
Каждый пиксел представлен одним битом. Биты укомплектованы в байте таким образом, что первый является старшим разрядом | |
Каждый пиксел представлен одним битом. Биты укомплектованы в байте таким образом, что первый является младшим разрядом | |
Данные растрового изображения представляют собой 8-битные индексы цветовой палитры | |
Каждый пиксел представлен тридцатью двумя битами. Однако значение для альфа-канала всегда равно значению 0xFF, т. е. непрозрачно | |
Каждый пиксел представлен 32 битами | |
Практически идентичен формату Format_ARGB32, но код оптимизирован для использования объекта QImage в качестве контекста рисования |
Значение формата можно узнать с помощью метода format(). Для конвертирования растрового изображения из одного формата в другой предусмотрен метод convertToFormat(), который возвращает новый объект QImage.
Чтобы создать объект этого класса, необходимо в конструктор передать ширину, высоту и формат растрового изображения. Например, следующая строка создает растровое изображение шириной 320 и высотой 200 пикселов и глубиной цвета 32 бита.
QImage img(320, 240, QImage::Format_RGB32);
Содержимое для объекта QImage также можно считать из файла, хранящего растровое изображение, передав имя файла в конструктор при создании объекта класса QImage. Если данный графический формат поддерживается Qt, то данные будут загружены и автоматически установится ширина, высота и формат. Например:
QImage img("koala.jpg");
В конструктор можно передавать и указатель на массив данных XPM. Например, загрузка растровых данных будет выглядеть следующим образом:
#include "image_xpm.h" ... QImage img(image_xpm);
В качестве альтернативы можно воспользоваться методом load() для считывания файла. Первым параметром передается имя файла, а вторым — формат. Формат файла обозначается строкой типа unsigned char*, принимающей одно из следующих строковых значений: GIF, BMP, JPG, XPM, XBM или PNG. Если во втором параметре вообще ничего не передавать, то класс QImage попытается распознать графический формат самостоятельно. Например:
QImage img; img.load("koala.jpg");
При помощи метода save() можно сохранять растровое изображение из объекта класса QImage в файл. Первым параметром передается имя файла, а вторым — формат, в котором он должен быть сохранен. Например:
QImage img(320, 240, 32, QColor::blue); img.save("blue.jpg", "JPG");
Класс QImage позволяет изменить или получить цвета пикселов растрового изображения. RGB-значение пиксела с координатами (X, Y) можно получить с помощью метода pixel(x, y). Для записи RGB-значения используется структура данных QRgb. Например:
QRgb rgb = img.pixel(250, 100);
Установить пикселу с координатами (X, Y) новое RGB-значение можно методом setPixel(x, y, rgb).
Например:
QRgb rgb = qRgb(200, 100, 0); img.setPixel(20, 50, rgb);
На следующем шаге рассмотрим пример изменения яркости изображения.