WMF / EMF 文件格式转换 C#

2023-12-02

在我的程序中,我需要“播放”或“解析”Windows 图元文件(WMF 和 EMF)。我查遍了 MSDN 和 Google,最接近的是 Graphics。枚举元文件方法。我可以让它工作,因为我的 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 世界中也没有太多可做的事情。

所以你需要查阅古籍!

本书附带代码示例 CD-ROM其中包括使用 EMF 播放 API 的示例程序。

这给你带来了两个问题。

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

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

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

Update

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

MS-EMF:增强型图元文件格式

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

Windows图形编程源代码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WMF / EMF 文件格式转换 C# 的相关文章

  • ROWNUM 的 OracleType 是什么

    我试图参数化所有现有的 sql 但以下代码给了我一个问题 command CommandText String Format SELECT FROM 0 WHERE ROWNUM lt maxRecords command CommandT
  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • C++:无法使用scoped_allocator_adaptor传播polymorphic_allocator

    我有一个vector
  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • 使用 OpenCV 的 Heroku NodeJS 应用

    我尝试了很多构建包并在 google 上搜索了很多文章 但我就是无法部署我的 NodeJS 应用程序 所有构建包都已过时 2 年以上 而且都不起作用 到目前为止 我尝试了以下构建包 https github com zachlatta he
  • 增加 WordPress 的最大上传限制

    我需要将 PDF 文件上传到我的WordPress 网站 当我去上传新媒体 然后尝试上传它 它说 FileName pdf 超出了该网站的最大上传大小 我尝试查找 php ini 文件 但找不到它 我跑了phpinfo 通过创建一个新文件
  • 如何读取 MIT/GNU 方案中的文本文件?

    我一直在学习 SICP 我想应用我迄今为止学到的一些概念 也就是说 积累 映射和过滤将帮助我提高工作效率 我主要使用 CSV 文件 并且我知道 MIT GNU 方案不支持这种文件格式 但这没关系 因为我可以将 CSV 文件导出到 txt 文
  • 如何在sql server中将字符串转换为查询

    如何添加包含 And 子句的字符串 但是当我们应用查询该字符串时 该字符串将被视为查询并满足所有和条件我有一个查询 例如 Declare WhereQuery varchar max SET WhereQuery class BCA and
  • 如何跳过 XML 反序列化中引发错误的对象?

    我正在对非常大的 XML 文档 有时超过 200MB 使用 XML 反序列化 大多数文档都运行得很好 但有时反序列化函数会抛出错误 例如 当整数是字符串时 您会收到 格式错误 当无法识别指定的类型时 您会收到错误 Input string
  • 如何在dust.js中实现自定义渲染逻辑?

    我使用dust js 来呈现变量名称列表 这些名称有时很长并且包含下划线 例如 SUM COUNT LABOR COUNTRIES SMS PAST 浏览器不会用下划线换行 因此它会变得难看 我希望我的灰尘模板在每个下划线后添加一个零宽度的
  • 简单的 OpenGL GUI 框架用户交互建议? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我正在从头开始设计一个简单的 GUI 框架作为一个项目 使用 OpenGL 没有任何其他外部东西 并且需要一些关于如何实现用户交互的建议 基本上 我有一个基类GUIItem所有元素都继承自
  • 快速合并/连接两个表linux命令行

    假设我有两个相对较大的制表符分隔文件 file1 txt file2 txt file1 txt id tcity tcar ttype tmodel file2 txt id tname trating 让我们假设 file1 txt 有
  • 在cardlayout中切换卡片后运行方法

    我确信以前有人问过这个问题 但我的谷歌今天不强 我有一个使用 CardLayout 作为其管理器的 JFrame 当我在不使用开关的情况下切换到每个 JPanel 时 如何运行 Start 方法 我用来将框架添加到布局的代码是 Adds J
  • 如何使用 SQLiteAssetHelper 从加密数据库读取数据?

    我有一个加密的数据库并插入资产文件夹中 我正在使用 SQLiteAssetHelper 类从数据库检索数据 当我从加密数据库检索数据时 它会抛出类似 E SQLiteLog 26 文件已加密或不是数据库 的错误 无论如何 有没有使用 SQL
  • 在Java中通过txt文件创建对象到数组中

    我正在尝试完成一个小程序 我有一个文本文件 txt 来存储我所拥有的对象的不同数据 该文件的结构如下 例如 data txt Sedane 2005 195000 Diesel Blue SUV 2013 34000 Fuel Black
  • 避免对某些自动完成的订单重复发送电子邮件通知

    我在 WooCommerce 上使用这个小小的和平代码从这个答案基于支付网关自动完成付费处理订单 AUTO COMPLETE PAID ORDERS IN WOOCOMMERCE add action woocommerce thankyo
  • 使用 32 位哈希时发生冲突的概率

    我的数据库中有一个 10 个字符的字符串键字段 我已经使用 CRC32 对该字段进行哈希处理 但我担心重复项 有人可以告诉我在这种情况下发生碰撞的可能性吗 P S 我的字符串字段在数据库中是唯一的 如果字符串字段的数量为 100 万个 那么
  • 如何使用通用方法实现特征?

    我正在尝试实现一个包含通用方法的特征 trait Trait fn method
  • plt.plot(x,y) 和 plt.show() 如何工作?

    我想知道之间发生的基本骨干流程plt plot x y and plt show 的命令matplotlib pyplot 详细说明一下 这段代码 plt plot x y plt show 显示所需的图表 没问题 另外 代码 plt pl
  • 在 Azure DevOps 发布管道中运行 Java Selenium 测试

    我正在为 AzureDevops CI CD 管道中的 Java 项目进行 POC 我创建了一个 Maven 项目 其中包含 Selenium 测试 TestNG 该测试针对独立于我的项目的演示网站运行 我想在构建管道中运行单元测试 并在发
  • 有什么简单的方法来创建具有固定长度和总和的数组组合吗?

    例如 array 4 0 0 生成的数组必须具有固定长度 并且数组的总和也必须是固定的 获得此输出的最短且有效的方法是什么 允许导入函数 Output 4 0 0 0 4 0 0 0 4 3 1 0 0 3 1 1 0 3 1 3 0 0
  • 在 PDO 连接字符串中使用常量并通过 PDO 连接调用函数 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 我在 PDO 连接中使用常量以及调用包含 PDO 连接
  • Angular $http.post 返回空错误

    我正在使用 Angular JS 将一些数据发送到 NodeJS 服务器 当我使用curl时 我取回了发送的数据 正确的结果 curl d MyKey My Value H Content Type application json htt
  • WMF / EMF 文件格式转换 C#

    在我的程序中 我需要 播放 或 解析 Windows 图元文件 WMF 和 EMF 我查遍了 MSDN 和 Google 最接近的是 Graphics 枚举元文件方法 我可以让它工作 因为我的 EnumerateMetafileProc 回