#include "SVG.h" #include #include #include #include #include #include "Renderive/base/global.h" void SVG_Image_Render::render(QPainter* painter, const QRectF& rect) { render(painter, rect, _color); } void SVG_Image_Render::render(QPainter* painter) { QSvgRenderer renderer(change_color(_color)); renderer.render(painter); } void SVG_Image_Render::render(QPainter* painter, const QRectF& rect, const QColor& color) { QSvgRenderer renderer(change_color(color)); renderer.render(painter, rect); } QImage SVG_Image_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 SVG_Image_Render::to_pixmap(QSize size, const QColor& color) { return QPixmap::fromImage(to_image(size, color)); } QByteArray SVG_Image_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 out_stream(&ret); doc.save(out_stream, 4); return ret; } SVG_Image_Render& SVG_Image_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 svg_content = in.readAll(); file.close(); doc.setContent(svg_content); return *this; }