Files
Renderive/YSGraphic_Core/component/SVG.cpp
T
2026-06-16 13:33:27 +08:00

63 lines
1.7 KiB
C++

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