#include "SVG.h" #include #include #include #include #include #include "../base/Global.h" void SVGImage_Render::render(QPainter* painter, const QRectF& rect) { render(painter, rect, _color); } void SVGImage_Render::render(QPainter *painter) { QSvgRenderer renderer(change_color(_color)); renderer.render(painter); } void SVGImage_Render::render(QPainter* painter, const QRectF& rect, const QColor& color) { QSvgRenderer renderer(change_color(color)); renderer.render(painter, rect); } QImage SVGImage_Render::to_image(QSize size, const QColor& color) { QImage image(size, QImage::Format_ARGB32); image.fill(Qt::transparent); QPainter painter(&image); QSvgRenderer renderer(change_color(color)); renderer.render(&painter, QRectF(QPointF(0, 0), QSizeF(size))); return image; } QPixmap SVGImage_Render::to_pixmap(QSize size, const QColor& color) { return QPixmap::fromImage(to_image(size, color)); } QByteArray SVGImage_Render::change_color(const QColor& color) { QDomElement root = doc.documentElement(); auto text = color.name(QColor::HexRgb).toUpper(); root.setAttribute("fill", text); if (color.alpha() != 255) { root.setAttribute("fill-opacity", QString::number(color.alphaF())); } QByteArray ret; QTextStream outStream(&ret); doc.save(outStream, 4); return ret; } SVGImage_Render& SVGImage_Render::create() { QFile file(_path); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qWarning() << VAR_QSTR_1(_path) + "无法打开! " + QLOG_POS; return *this; } QTextStream in(&file); QString svgContent = in.readAll(); file.close(); doc.setContent(svgContent); return *this; }