导出为 EMF 的 SVG 会损失精度,但导出为 PNG 则看起来不错

导出为 EMF 的 SVG 会损失精度,但导出为 PNG 则看起来不错

我是一名 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

我将与您的测试图进行比较:

  1. 这是您提供的 PNG 文件,因此这可能是所需的结果:

    在此处输入图片描述

  2. 您的代码的输出,大约相同大小:

    在此处输入图片描述

  3. 您提供的 EMF 文件,显示在 IrfanView 中(同样大约相同的大小)

    在此处输入图片描述

  4. 与 3. 相同,但已View -> Display Options -> Use Resample打开:

    在此处输入图片描述

结论

由于 4. 看起来与 1. 类似(即期望结果),我的结论是转换为 EMF 格式完全没问题,但您的代码使用简单的、可能基于像素的算法缩放图形。因此,恕我直言,您需要实现例如双线性插值常规。

答案2

当使用 Photoshop 查看时,EMF 没有添加框架,因此这似乎是查看器的问题。

由于某些不为人知的原因,无法下载您的查看器,我已使用免费 WMF 查看器要查看您的 EMF 图像,

EMF 文件看起来很完美 - 它可以像矢量图形图像一样完美地放大和缩小。但该查看器还在图像周围显示了一个黑框。

我还使用我曾经编写的旧 wmf/emf 查看器查看了您的 EMF,该查看器也没有显示黑框。我注意到,在我自己的查看器中,我仅使用边界框来确定图像的纵横比(高度与宽度),以便正确显示它,这意味着不会挤压或拉伸。

我的结论是,两个查看器都将边界框显示为一个框架。这是不正确的,因为它的目的是提供有关图像的推荐查看矩形的信息,而不是显示。因此,您生成 EMF 的过程似乎是正确的。

相关内容