Files
Renderive/Widget/component/SVG.cpp
T
2026-07-29 12:30:40 +08:00

54 lines
1.8 KiB
C++

#include "SVG.h"
#include <QFile>
#include <QPainter>
#include <QTextStream>
#include <qdom.h>
#include <utility>
#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;
}