QSvgRenderer
モジュールにはQtSvg
クラスがあり、画像をQPaintDevice
にレンダリングできます。これはQImage
にすることができます。その場合、以下を作成します。
Image svgBufferImage(renderer.defaultSize(), QImage::Format_ARGB32);
しかし、SVGレンダラーからデフォルトとは異なるサイズのQImage
にレンダリングする方法は? SVG形式の画像は品質を損なうことなく拡大縮小できるため、QSvgRenderer
を使用してSVGファイルからPNGなどの静的画像を生成することは可能ですか?
誰かがより良いアイデアを持っていますか?基本的に、さまざまなサイズのSVGファイルからPNGなどの画像を作成する必要があります。
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");
}
これにより、渡されたSVGファイルから500x200のPNG画像が作成されます。
SVGロゴ ページからのSVG画像の出力例:
ここに完全な答えがあります:
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");