image qt svg

¿Cómo representar un SVG escalado a una QImage?



qt (2)

Aquí está la respuesta completa:

QImage QPixmap::toImage()

Si el mapa de píxeles tiene una profundidad de 1 bit, la imagen devuelta también tendrá una profundidad de 1 bit. Las imágenes con más bits se devolverán en un formato que represente estrechamente al sistema subyacente. Por lo general, esto será QImage :: Format_ARGB32_Premultiplied para pixmaps con alfa y QImage :: Format_RGB32 o QImage :: Format_RGB16 para pixmaps sin alfa.

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

También copia de la respuesta anterior.

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

Hay una clase QSvgRenderer en el módulo QtSvg que puede representar la imagen en QPaintDevice . Este puede ser QImage . En ese caso crearemos:

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

Pero, ¿cómo renderizar en una QImage de un tamaño diferente al predeterminado del renderizador SVG? Dado que la imagen del formato SVG se puede escalar sin pérdida de calidad, ¿es posible generar imágenes estáticas, como PNG, a partir de archivos SVG utilizando QSvgRenderer ?

¿Alguien tiene una idea mejor? Básicamente necesito crear imágenes como PNG a partir de archivos SVG en diferentes tamaños.


Solo dale a tu QImage el tamaño deseado. El renderizador SVG se escalará para adaptarse a la imagen completa.

#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"); }

Esto creará una imagen PNG 500x200 del archivo SVG pasado.

Ejemplo de salida con una imagen SVG de la página de logotipos de SVG :