有人可以提供一个如何加载.svg文件并使用C / C ++和任何库显示它的示例吗?我想知道你是否会使用SDL,cairo或者什么。
答案 0 :(得分:3)
答案 1 :(得分:2)
正如帕维尔所说,QtSvg是我相信的方式。它更容易使用,但在我们的团队中,我们遇到了QtSvg的性能问题,尤其是在Linux上。所以我们决定手动直接解析SVG文件XML并使用Qt本身进行渲染。事实证明这要快得多。
伪代码: -
// Read the SVG file using XML parser (SAX)
void SvgReader::readFile()
{
QFile file(<some svg filename>);
if (!file.open(QFile::ReadOnly | QFile::Text)) {
qWarning("Cannot open file");
return;
}
QString localName;
QXmlStreamAttributes attributes;
pXml = new QXmlStreamReader(&file);
pXml->setNamespaceProcessing(false);
while (!pXml->atEnd()) {
switch (pXml->readNext()) {
case QXmlStreamReader::StartElement:
localName = pXml->name().toString();
if (localName.compare(<some element path>) == 0) {
attributes = pXml->attributes();
QStringRef data = attributes.value(<some attribute name>);
// parse/use your data;
}
// similarly other case statements
}
}
}
答案 2 :(得分:1)
QtSvg模块可能会有所帮助。
答案 3 :(得分:1)
您可以尝试boost.svg_plot
答案 4 :(得分:0)
您可以尝试lunasvg。
#include <lunasvg/svgdocument.h>
int main()
{
SVGDocument document;
document.loadFromFile("example.svg");
std::uint32_t bitmapWidth = std::uint32_t(document.documentWidth());
std::uint32_t bitmapHeight = std::uint32_t(document.documentHeight());
std::unique_ptr<std::uint8_t[]> pixels(new std::uint8_t[bitmapWidth*bitmapHeight*4]);
Bitmap bitmap(pixels.get(), bitmapWidth, bitmapHeight, bitmapWidth*4);
document.render(bitmap, 96.0, 0x000000FF);
// do something useful with bitmap here.
}