我是一名 Windows 桌面程序员,需要将某些 SVG 转换为 EMF 才能用它进行编程。
我的图形设计技能处于初级水平,但我已经成功地使用 Inkscape 将 SVG 文件转换为 EMF。但是,结果看起来不像原始文件,可以说不那么“精确”。如果我将 SVG 导出为 PNG,结果将与原始文件相同。不幸的是,我需要 Windows 识别的矢量格式,而这仅仅是 EMF(我使用的是纯 WinAPI 和 C++,因此有这个限制……)。
要确切了解我的意思,请链接到我制作的原始 SVG、EMF 和 PNG这里。只需点击下载:test.rar位于五颗黄色星星上方(见下图)。
问题似乎出在 EMF 文件的尺寸上(它应该是 90 x 120),因为当我将应用程序调整到更大的尺寸时,图片非常清晰。
我请求您的帮助,以使 EMF 文件获得与原始 SVG 相同的图形质量。
为了进一步帮助您解决我的问题,这里是一个在窗口中显示 EMF 的小应用程序。只需将 EMF 放在与应用程序相同的位置,并将 EMF 命名为test.emf
。
感谢您付出的时间和努力。致以最诚挚的问候。
答案1
我将与您的测试图进行比较:
这是您提供的 PNG 文件,因此这可能是所需的结果:
您的代码的输出,大约相同大小:
您提供的 EMF 文件,显示在 IrfanView 中(同样大约相同的大小)
与 3. 相同,但已
View -> Display Options -> Use Resample
打开:
结论
由于 4. 看起来与 1. 类似(即期望结果),我的结论是转换为 EMF 格式完全没问题,但您的代码使用简单的、可能基于像素的算法缩放图形。因此,恕我直言,您需要实现例如双线性插值常规。
答案2
当使用 Photoshop 查看时,EMF 没有添加框架,因此这似乎是查看器的问题。
由于某些不为人知的原因,无法下载您的查看器,我已使用免费 WMF 查看器要查看您的 EMF 图像,
EMF 文件看起来很完美 - 它可以像矢量图形图像一样完美地放大和缩小。但该查看器还在图像周围显示了一个黑框。
我还使用我曾经编写的旧 wmf/emf 查看器查看了您的 EMF,该查看器也没有显示黑框。我注意到,在我自己的查看器中,我仅使用边界框来确定图像的纵横比(高度与宽度),以便正确显示它,这意味着不会挤压或拉伸。
我的结论是,两个查看器都将边界框显示为一个框架。这是不正确的,因为它的目的是提供有关图像的推荐查看矩形的信息,而不是显示。因此,您生成 EMF 的过程似乎是正确的。