我的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来仅绘制一次整个场景?
我认为您无法立即获得想要的东西。您可以研究一下painter的私有实现,并想出一种可以一次完成所有操作的方法-生成每个矢量painter组件并将其栅格化到另一个绘画设备,然后再移动到下一个绘画设备,但这可能并不简单并且几乎不可能值得。
只需介绍到目前为止的两个解决方案,并坚持使用较快的解决方案,看起来第一个解决方案可能会更高效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句