我的Qt应用程序使用QPainter绘制矢量图形。我需要两次这个图形输出,一次作为SVG格式的矢量输出,我使用QSvgGenerator,一次作为像素格式,我使用QImage。 根据我在文档中发现的内容,我可以先绘制到SVG,然后将SVG输出转换为Qimage:
QPainter painter;
QSvgGenerator generator;
generator.setSize(QSize(width_, height_));
// more initializations here
painter.begin(&generator);
doPaintMyStuff(&painter);
painter.end();
generator.setOutputDevice(...) // pipe the SVG output to the server
QImage image(width_, height_, QImage::Format_ARGB32_Premultiplied);
QSvgRenderer renderer;
renderer.load(...) // get the svg output we just generated
painter.begin(&image);
renderer.render(&painter); // render the vector graphic to pixel
painter.end();
usePixelData(image.constBits()); // pipe the pixel output to the server
或使用两个不同的后端绘制两次:
QPainter painter;
QSvgGenerator generator;
generator.setSize(QSize(width_, height_));
// more initializations here
QImage image(width_, height_, QImage::Format_ARGB32_Premultiplied);
painter.begin(&generator);
doPaintMyStuff(&painter);
painter.end();
painter.begin(&image);
doPaintMyStuff(&painter);
painter.end();
generator.setOutputDevice(...) // pipe the SVG output to the server
usePixelData(image.constBits()); // pipe the pixel output to the server
两种解决方案都有效,但两者对我来说效率都非常低,因为我总是两次绘制相同的场景。后者调用QPainter上的所有函数两次,前者通过重新跟踪我刚刚生成的SVG输出再次绘制所有操作。
有没有办法将多个后端连接到一个QPainter只绘制一次整个场景?
答案 0 :(得分:0)
我认为你无法获得你想要的东西。您可以深入了解画家的私人实现,并想出一种方法,只做一次 - 生成每个矢量画家组件并将其光栅化到另一个绘画设备并移动到下一个,但它可能不会很简单,很难值得。
只需简要介绍目前为止的两种解决方案并坚持使用速度更快的解决方案,看起来第一种解决方案效率可能更高。