c++ - 使用 C/C++ 打开和编辑 SVG 文件

标签 c++ c windows svg librsvg

我正在开发一个必须使用 SVG 形状来创建图表的编辑器。 要打开和显示 SVG,我使用 librsvg,它实际上非常好,但只对渲染 SVG 有用,而不是编辑它们。

我想访问形状的属性并更改它们的值(即宽度、大小)。

我使用 Cairo 将它们绘制到屏幕上,但我不想使用 cairo 的缩放功能,因为它与更改形状的大小不同。

我在 Win32 上使用 C++ builder XE3。

有谁知道我可以用来这样做的好 C/C++ 库吗?

感谢您的帮助。

最佳答案

Cairo 的缩放函数缩放整个坐标系,但如果您首先平移到形状的原点,则可以在单个形状上使用它;如果您将这些更改与保存/恢复对放在一起,它只会影响在此范围内完成的绘图。在描边之前重置矩阵允许您在不更改描边宽度的情况下调整绘图的大小(或者,您可以将 stroke_width 调整 1/比例因子)。

cairo_matrix_t m;
cairo_get_matrix(cr, &m);
cairo_save(cr);
    cairo_translate(shape_x, shape_y);
    cairo_scale(shape_w, shape_h);
        //cairo_move_to(cr, x, y);   //perform the actual drawing
        //cairo_line_to(cr, x, y);
        //cairo_closepath(cr);
    cairo_set_matrix(cr, &m);
    cairo_stroke(cr);
cairo_restore(cr);

如果像这样显式地重置矩阵,您实际上不再需要保存/恢复(平移和缩放除了矩阵之外不会影响任何东西,笔划重置路径)。

关于c++ - 使用 C/C++ 打开和编辑 SVG 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17209772/

相关文章:

java - java检测目录是否被修改

c++ - 不能在指针数组中赋值

c - 引脚在 CTC 模式下无法切换

c - 是否可以在 frama-c 中指定缓冲区访问子句?

c - 共享内存段在 32 位和 64 位进程之间共享

启动时出现 C++ 服务错误 : Could not Start the Service on Local Computer

c++ - srand(time(NULL)) 产生相似的结果

c++ - 将整数附加到 char* 然后清除

c++ - 使用 '?' 而不是 L' 有什么缺点吗?用wchar_t?

c - 从 stdin 非阻塞读取