How to render a scaled SVG to a QImage?

前端 未结 2 1289
一整个雨季
一整个雨季 2020-12-01 06:55

There is a QSvgRenderer class in QtSvg module which can render image onto QPaintDevice. This one can be QImage. In that c

相关标签:
2条回答
  • 2020-12-01 07:03

    Here is complete answer:

    QImage QPixmap::toImage() 
    

    If the pixmap has 1-bit depth, the returned image will also be 1 bit deep. Images with more bits will be returned in a format closely represents the underlying system. Usually this will be QImage::Format_ARGB32_Premultiplied for pixmaps with an alpha and QImage::Format_RGB32 or QImage::Format_RGB16 for pixmaps without alpha.

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

    Also copy from above answer

    // Save, image format based on file extension
    image.save("./svg-logo-h.png");
    
    0 讨论(0)
  • 2020-12-01 07:05

    Just give your QImage the desired size. The SVG renderer will scale to fit the whole image.

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

    This will create an 500x200 PNG image from the passed in SVG file.

    Example output with an SVG image from the SVG logos page:

    0 讨论(0)
提交回复
热议问题