gpt4 book ai didi

c# - WMF/EMF 文件格式转换 C#

转载 作者:太空狗 更新时间:2023-10-29 22:21:00 29 4
gpt4 key购买 nike

在我的程序中,我需要“播放”或“解析”Windows 图元文件(WMF 和 EMF)。我已经通过 MSDN 和 Google 进行了挖掘,最接近的是图形。枚举图元文件方法。我可以让它工作,因为我的 EnumerateMetafileProc 回调被调用,然后我可以调用 PlayRecord。缺少的是如何从该回调中获取有用的数据。

我看过的例子:http://msdn.microsoft.com/en-us/library/ms142060.aspx

回调有一个 recordType 参数,它是一个 ENUM。嗯,这看起来很有用,除了它们似乎无法将数据转换为任何有用的类型。

我的目标是回放 WMF/EMF 的创建过程,这样我就可以对具有(DrawLine、DrawPoint、DrawArc)等方法的专用图形类进行函数调用。从某种意义上说,我正在以完全不同的格式(转换)重新创建 WMF/EMF 绘图。​​

非常感谢您提供这方面的帮助。

最佳答案

Graphics.EnumerateMetafile , 不幸的是,它是围绕 Win32 API 的一个非常非常薄的层。对于 EMF 中的每条记录,您都会获得记录特定结构的非托管内存地址。没有关于它可能包含的内容的文档 - 但是,在 Win32 世界中也没有什么可继续的。

所以你需要查阅古代文献!

This book came with a code sample CD-ROM其中包括使用 EMF 播放 API 的示例程序。

这给您带来了两个问题。

  1. 这本书显然已经绝版,因此请确保您购买的任何旧书都包含一张可用的 CD-ROM。

  2. 示例代码全部使用 C/C++ 编写,为用于描述所有 EMF 记录的 100 多个结构声明必要的互操作将是一项艰巨的任务。

所以另一种方法可能是在 .NET 中声明一个巨大的接口(interface),它为您需要拦截的每个 GDI 调用提供一个方法,然后使用 C++/CLI 调整示例 C++ 代码,以便它为每个调用您的巨大接口(interface)记录。

更新

虽然 EMF 播放的 MSDN 文档不包含特定 EMF 记录的详细信息,但 Microsoft 已在 2006 年单独发布了完整的规范:

MS-EMF: Enhanced Metafile Format

我上面链接的那本书的作者也提供了 CDROM 示例的源代码可供下载:

Source code for Windows Graphics Programming

关于c# - WMF/EMF 文件格式转换 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1763428/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com