Как визуализировать масштабированный SVG в QImage? - PullRequest
20 голосов
/ 18 декабря 2011

В модуле QtSvg имеется класс QSvgRenderer, который может отображать изображение на QPaintDevice. Это может быть QImage. В этом случае мы создадим:

Image svgBufferImage(renderer.defaultSize(), QImage::Format_ARGB32);

Но как визуализировать в QImage другого размера, чем по умолчанию в рендере SVG? Поскольку изображение в формате SVG можно масштабировать без потери качества, возможно ли создавать статические изображения, например PNG, из файлов SVG с использованием QSvgRenderer?

У кого-нибудь есть идея получше? В основном мне нужно создавать изображения, такие как PNG, из файлов SVG разных размеров.

Ответы [ 2 ]

42 голосов
/ 18 декабря 2011

Просто дайте вашему QImage желаемый размер.Средство визуализации SVG масштабируется до размера всего изображения.

#include <QApplication>
#include <QSvgRenderer>
#include <QPainter>
#include <QImage>

// In your .pro file:
// QT += svg 

int main(int argc, char **argv)
{
    // A QApplication instance is necessary if fonts are used in the SVG
    QApplication app(argc, argv);

    // Load your SVG
    QSvgRenderer renderer(QString("./svg-logo-h.svg"));

    // Prepare a QImage with desired characteritisc
    QImage image(500, 200, QImage::Format_ARGB32);
    image.fill(0xaaA08080);  // partly transparent red-ish background

    // Get QPainter that paints to the image
    QPainter painter(&image);
    renderer.render(&painter);

    // Save, image format based on file extension
    image.save("./svg-logo-h.png");
}

Это создаст PNG-изображение размером 500x200 из переданного в SVG-файл.

Пример вывода с изображением SVG из SVG логотипы страница:

enter image description here

4 голосов
/ 13 мая 2016

Вот полный ответ:

QImage QPixmap::toImage() 

Если растровое изображение имеет глубину 1 бит, возвращаемое изображение также будет иметь глубину 1 бит.Изображения с большим количеством битов будут возвращены в формате, который представляет собой основную систему.Обычно это QImage :: Format_ARGB32_Premultiplied для растровых изображений с альфа и QImage :: Format_RGB32 или QImage :: Format_RGB16 для растровых изображений без альфа.

QImage img = QIcon("filepath.svg").pixmap(QSize(requiredsize)).toImage()

Также скопируйте ответ выше

// Save, image format based on file extension
image.save("./svg-logo-h.png");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...