| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #include "lc_imageexporter.h" |
| |
|
| | #include <QImageWriter> |
| | #include <QSvgGenerator> |
| |
|
| | #include "lc_graphicviewport.h" |
| | #include "lc_printviewportrenderer.h" |
| | #include "rs_graphic.h" |
| | #include "rs_painter.h" |
| |
|
| | LC_ImageExporter::LC_ImageExporter(QObject* parent) |
| | : QObject{parent} { |
| | } |
| |
|
| | |
| | bool LC_ImageExporter::exportToImage(RS_Graphic* graphic, const ExportOptions& options) { |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | bool exportToSvg = options.format.toLower() == "svg"; |
| | if (exportToSvg) { |
| | return exportGraphicToSVG(graphic, options); |
| | } |
| | else { |
| | return exportGraphicToImage(graphic,options); |
| | } |
| | } |
| |
|
| | bool LC_ImageExporter::exportGraphicToSVG(RS_Graphic* graphic, const ExportOptions& options) { |
| | QSize size = options.size; |
| | QSvgGenerator svgGenerator; |
| | prepareSVGGenerator(options, size, svgGenerator); |
| | QPaintDevice* buffer = &svgGenerator; |
| | renderGraphic(graphic, options, buffer); |
| | return true; |
| | } |
| |
|
| | bool LC_ImageExporter::exportGraphicToImage(RS_Graphic* graphic, const ExportOptions& options) { |
| | QSize size = options.size; |
| | auto pixMap = QPixmap(size); |
| | QPaintDevice* buffer = &pixMap; |
| | renderGraphic(graphic, options, buffer); |
| | return savePixmapToImage(options, pixMap); |
| | } |
| |
|
| | bool LC_ImageExporter::savePixmapToImage(const LC_ImageExporter::ExportOptions& options, const QPixmap &pixMap) { |
| | QImage img = pixMap.toImage(); |
| | QImageWriter iio; |
| | iio.setFileName(options.fileName); |
| | iio.setFormat(options.format.toLatin1()); |
| |
|
| | bool ret = false; |
| | if (iio.write(img)) { |
| | ret = true; |
| | } |
| | else { |
| | |
| | |
| | } |
| | return ret; |
| | } |
| |
|
| | void LC_ImageExporter::renderGraphic(RS_Graphic* graphic, const LC_ImageExporter::ExportOptions& options, QPaintDevice* buffer) { |
| | RS_Painter painter(buffer); |
| | preparePainter(options, painter); |
| |
|
| | |
| | LC_GraphicViewport viewport; |
| | prepareViewport(graphic, options, viewport); |
| |
|
| | LC_PrintViewportRenderer renderer = LC_PrintViewportRenderer(&viewport, &painter); |
| | renderer.setBackground(options.backgroundBlack ? Qt::black : Qt::white); |
| | renderer.loadSettings(); |
| | renderer.render(); |
| | } |
| |
|
| | void LC_ImageExporter::preparePainter(const ExportOptions& options, RS_Painter& painter) { |
| | bool black = options.backgroundBlack; |
| | painter.setBackground(black ? Qt::black : Qt::white); |
| | if (options.blackAndWhite) { |
| | painter.setDrawingMode(black ? RS2::ModeWB : RS2::ModeBW); |
| | } |
| | painter.eraseRect(0, 0, options.size.width(), options.size.height()); |
| | } |
| |
|
| | void LC_ImageExporter::prepareSVGGenerator(const ExportOptions& options, const QSize size, |
| | QSvgGenerator& svgGenerator) { |
| | svgGenerator.setSize(size); |
| | svgGenerator.setViewBox(QRectF(QPointF(0, 0), size)); |
| | svgGenerator.setFileName(options.fileName); |
| | } |
| |
|
| | void LC_ImageExporter::prepareViewport(RS_Graphic* graphic, const ExportOptions& options, LC_GraphicViewport &viewport) { |
| | viewport.setSize(options.size.width(), options.size.height()); |
| | auto borderWidth = options.borders.width(); |
| | auto borderHeight = options.borders.height(); |
| | viewport.setBorders(borderWidth, borderHeight, borderWidth, borderHeight); |
| | viewport.setContainer(graphic); |
| | viewport.zoomAuto(false); |
| | viewport.loadSettings(); |
| | } |
| |
|