我希望支持将 SVG 图像渲染为位图,我正在使用 librsvg。到目前为止,它运行良好,并且使用 Cairo 进行绘制,万岁!但是我遇到了一个问题:
我们有一个类似于 Windows 资源管理器的控件,例如,它在目录中创建文件的缩略图大小的图像,因此该产品将被扩展为生成 SVG 的缩略图。
它使用后台线程来生成缩略图图像,因此 UI 在工作时不会被冻结。该代码已投入生产很长时间,因此就并发问题而言没有问题。但是,当从主线程以外的线程调用 rsvg_handle_new() 时,似乎会发生访问冲突,而不是我使用 librsvg 没有问题。
查看堆栈跟踪,崩溃似乎发生在 xmlSetGlobalState() 的 libxml2(这是 librsvg 的依赖项)中,问题似乎与此处报告的libxml2 crash on second use on Windows相同 ,似乎没有解决方案. 如果可以的话,我会将库的使用限制在主线程上,但我坚持使用现有的架构,它会在主线程之外生成缩略图。
我发现http://www.xmlsoft.org/threads.html建议首先在主线程中调用 xmlInitParser() ,这似乎是在创建 RsvgHandle 期间由 librsvg 调用的(我认为)。
所以我不确定这是否真的是 libxml2 问题,librsvg 使用 libxml2 的方式有问题,还是我尝试使用 librsvg 的方式有问题?
有任何 libxml2 或 librsvg 专家吗?