首次提交
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
#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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user