Come rendere un SVG ridimensionato a un QImage?

Esiste una class QSvgRenderer nel modulo QtSvg che può eseguire il rendering dell’immagine su QPaintDevice . Questo può essere QImage . In tal caso creeremo:

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

Ma come eseguire il rendering su una QImage di dimensioni diverse rispetto a quelle predefinite dal renderer SVG? Poiché l’immagine in formato SVG può essere ridimensionata senza perdita di qualità, è ansible generare immagini statiche, come PNG, da file SVG usando QSvgRenderer ?

Qualcuno ha un’idea migliore? Fondamentalmente ho bisogno di creare immagini come PNG da file SVG di diverse dimensioni.

Basta dare al tuo QImage la dimensione desiderata. Il renderer SVG verrà ridimensionato per adattarsi all’intera immagine.

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

Ciò creerà un’immagine PNG 500×200 dal file SVG passato.

Esempio di output con un’immagine SVG dalla pagina dei loghi SVG :

inserisci la descrizione dell'immagine qui

Ecco la risposta completa:

 QImage QPixmap::toImage() 

Se la pixmap ha una profondità di 1 bit, l’immagine restituita sarà anch’essa profonda 1 bit. Le immagini con più bit verranno restituite in un formato che rappresenta da vicino il sistema sottostante. Di solito questo sarà QImage :: Format_ARGB32_Premultiplied per pixmaps con alfa e QImage :: Format_RGB32 o QImage :: Format_RGB16 per pixmaps senza alfa.

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

Copia anche dalla risposta sopra

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