Создание и сохранение изображения из данных, хранящихся в std::vector

Есть ли в Qt метод, с помощью которого можно легко создать изображение на основе данных, хранящихся в std::vector? Я имею в виду, что в векторе есть цвета для каждых QPointF точек QWidget, на которых я рисую с помощью QPainter, но мне нужно не только нарисовать эту картинку на QWidget, используя цвета в векторе, но и сохранить ее. как картинка тоже.


person zerge    schedule 05.05.2015    source источник
comment
Каковы будут размеры изображения, если вы сохраните его данные в векторе?   -  person vahancho    schedule 05.05.2015
comment
@vahancho Я сохраняю значения цвета в векторе последовательно и нарезаю их в соответствии с размерами. Но если это проще, я бы создал другую структуру данных с размерами ширина * высота и поместил в нее данные. Я просто не знаю, какой метод Qt можно использовать для создания и сохранения изображения из этого.   -  person zerge    schedule 05.05.2015


Ответы (1)


Если вы знаете начальные размеры вашего изображения и имеете вектор с информацией о цвете, вы можете сделать следующее:

// Image dimensions.
const int width = 2;
const int height = 2;
// Color information: red, green, blue, black pixels
unsigned int colorArray[width * height] =
                    {qRgb(255, 0, 0), qRgb(0, 255, 0), qRgb(0, 0, 255), qRgb(0, 0, 0)};
// Initialize the vector
std::vector<unsigned int> colors(colorArray, colorArray + width * height);

// Create new image with the same dimensions.
QImage img(width, height, QImage::Format_ARGB32);
// Set the pixel colors from the vector.
for (int row = 0; row < height; row++) {
    for (int col = 0; col < width; col++) {
        img.setPixel(row, col, colors[row * width + col]);
    }
}
// Save the resulting image.
img.save("test.png");
person vahancho    schedule 05.05.2015
comment
Спасибо! Я очень ценю вашу помощь! - person zerge; 05.05.2015
comment
Это кажется немного медленным, нет ли способа просто правильно указать вектор, а затем передать его непосредственно в QImage или QPixmap? - person Dariusz; 11.01.2018
comment
@Dariusz, нет, ты не можешь создать QImage из вектора напрямую. Однако вы можете сделать это из необработанных данных (массив uchars) или QByteArray. - person vahancho; 11.01.2018