问题标签 [metafile]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3316 浏览

qt - Qt 的矢量图形剪贴板格式

我希望我的 Qt 应用程序能够以兼容的方式将简单的矢量图形保存到剪贴板。在 Windows 上,我希望能够将图形粘贴到 Microsoft Word 或 Powerpoint 中。在 Linux 上,我希望与 Open Office 兼容。

你会推荐哪种格式?Qt 能否以简单的方式生成 EMF?SVG是一种选择吗?

更新:

我目前的计划是添加一段本机 win32 代码来将图形渲染到 windows 上的 emf。此代码在 linux 上不可用。

0 投票
1 回答
990 浏览

.net - CreateEnhMetaFile 和 PlayEnhMetaFile 的 .NET 等价物是什么?

我正在将一些 C++ 代码移植到 VB.NET,它创建了一个由多个页面组成的打印作业。每个页面都有一个图形对象(文本、线条、曲线等)模板,在每个页面上保持相同,并且覆盖在每个页面上的是不同的数据。

模板在打印作业开始时使用 来创建为内存中的元文件CreateEnhMetaFile,并且在每个页面的开始处,该元文件使用 被绘制到打印设备上下文中PlayEnhMetaFile

我怎样才能在.NET 中做到这一点?到目前为止,从我对 API 的阅读来看,我似乎只能Metafile从文件或流中导入一个,而不能从头开始创建一个。这个对吗?

0 投票
3 回答
1392 浏览

delphi - 我在哪里可以找到使用 TMetafile 和 TMetafileCanvas 的文档和/或示例?

当我正在向我的应用程序添加自定义打印时,我决定使用 TMetafile 创建页面,然后使用它来预览和/或打印,但我发现缺少文档。

有没有什么好的资源来学习使用 TMetafile 和 TMetafileCanvas 的来龙去脉?

0 投票
2 回答
1442 浏览

.net - 可靠的 .wmf/wmf 到基于像素的图像转换

下午好,

我在使用.net 的内部(System.Drawing)基于 MetaFile / Image 处理包含透明区域的 .wmf 文件时遇到了一些麻烦。基本上每当我执行 MetaFile.LoadFile(...) 并将其保存为 tiff/png 等时,该源文件的某些区域都会丢失。我真的无法确定它,但它 - 似乎 - 元文件中基于矢量的信息工作正常,但基于像素的区域(例如放置在 .wmf 中的图像)丢失了。

有谁知道正确转换 wmf 文件的可靠、.net 本机和非 3rd-party 方式(如.. 基于像素的最终图像看起来像 .wmf.. 只是.. 好.. 像素化)?

干杯和感谢,-J

0 投票
3 回答
3565 浏览

.net - 从元文件到 JPEG/GIF 的 GDI+ 图像转换导致黑色背景

所以我正在将元文件(确切地说是 EMF)转换为 jpeg 或 gif(只要它与浏览器兼容就没有关系),当我进行转换时,所有透明像素都会变黑。我不知道如何在 GDI+ 中执行此操作,但这是我用来保存文件的方法:

0 投票
4 回答
7631 浏览

gdi - 指定 GDI 设备上下文的 DPI

我有一个生成元文件(EMF)的应用程序。它使用参考设备(又名屏幕)来渲染这些元文件,因此元文件的 DPI 会根据代码运行的机器而变化。

假设我的代码打算创建一个 8.5 英寸 x 11 英寸的元文件。使用我的开发工作站作为参考,我最终得到一个具有

  • { 0, 0, 21590, 27940 } 的 rclFrame(元文件的尺寸,以千分之一毫米为单位)
  • { 1440, 900 } 的 szlDevice(参考设备的尺寸,以像素为单位)
  • { 416, 260 } 的 szlMilimeters(参考设备的尺寸,单位为 mm)

好的,所以 rclFrame 告诉我 EMF 的大小应该是

  • 21590 / 2540 = 8.5 英寸宽
  • 27940 / 2540 = 11 英寸高

对了。使用这些信息,如果我的数学是正确的,我们也可以确定我的显示器的物理 DPI:

  • (1440 * 25.4) / 416 = 87.9231 水平 dpi
  • (900 * 25.4) / 260 = 87.9231 垂直 dpi

问题

任何播放此元文件的东西——EMF 到 PDF 的转换、在 Windows 资源管理器中右键单击 EMF 时的“摘要”页面等——似乎都会截断计算的 DPI 值,显示 87 而不是 87.9231(甚至88就好了)。

这会导致在播放元文件时页面的物理尺寸为 8.48 in x 10.98 in(使用 87 dpi)而不是 8.5 in x 11 in(使用 88 dpi)。

  • 是否可以更改参考设备的 DPI,以便存储在用于计算 DPI 的元文件中的信息变成一个很好的整数?
  • 我可以创建自己的设备上下文并指定其 DPI 吗?还是我真的必须使用打印机才能做到这一点?

感谢您的任何见解。

0 投票
3 回答
492 浏览

c# - 如何从字节数组中解析折线元文件记录?

在 C# 中定义以下 Windows GDI 类型时,我需要一点帮助。我byte[]在 C# 中有 a 形式的数据,我需要以某种方式在 C# 中将其编组或强制转换为以下形式。我想我需要定义正确的结构?这是类型:

姓名

最近的 API 调用

描述

折线是点的列表。与多边形不同,折线始终未填充,并且可以打开。

0 投票
1 回答
386 浏览

c# - 如何从字节数组中解析 CREATEPENINDIRECT 元文件记录?

在 C# 中定义以下 Windows GDI 类型时,我需要一点帮助。我byte[]在 C# 中有 a 形式的数据,我需要以某种方式在 C# 中将其编组或强制转换为以下形式。请参阅我的另一个问题,因为我得到了折线的答案。这是类型:

姓名

最近的 API 调用

描述

lopnColor 是笔的颜色, lopnWidth 是笔的宽度,如果笔的宽度 > 1 但 lopnStyle 不是solid,那么 lopnStyle 被忽略并设置为solid。

lopnStyle 可以是PS_SOLID, PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT, PS_NULL, PS_INSIDEFRAME, PS_USERSTYLE,之一PS_ALTERNATE。查看他们实际意思的来源。

还有一组标志和掩码可以在 lopnStyle 中找到,以及设置用笔绘制的线条的结束和连接样式,它们是PS_STYLE_MASK, PS_ENDCAP_ROUND, PS_ENDCAP_SQUARE, PS_ENDCAP_FLAT, PS_ENDCAP_MASK, PS_JOIN_ROUND, PS_JOIN_BEVEL, PS_JOIN_MITER, PS_JOIN_MASK, PS_COSMETIC, PS_GEOMETRIC, PS_TYPE_MASK, 再次查看源代码弄清楚这些。


更新:这是迄今为止我能做到的最接近:

0 投票
2 回答
381 浏览

c# - 如何从字节 [] c# 中解析 PolyPolygon16 元文件记录

在 C# 中定义以下 Windows GDI 类型时,我需要一点帮助。我byte[]在 C# 中有 a 形式的数据,我需要以某种方式在 C# 中将其编组或强制转换为以下形式。

这是类型:

编辑:我已经能够做到这一点,接近但不完全:

0 投票
2 回答
4712 浏览

vb.net - VB.net 将 MetaFile / EMF 保存为位图 (.tiff)

目前我有一个生成元文件的第三方控件。我可以毫无问题地将 .wmf 文件保存到磁盘。问题是如何将 Metafile 呈现为 Tiff 文件。

目前我有以下代码来获取我的元文件并保存它。

结束子

_ 公共共享函数 GetEnhMetaFileBits( ByVal hEMF As System.IntPtr, ByVal nSize As UInteger, ByVal lpData As IntPtr) As UInteger End Function

我尝试了各种 IMAGE 和 Graphic 调用,但无法将元文件保存为 .tiff。任何建议都会很棒。我什至尝试创建一个新的位图并将元文件绘制到它上面。我总是以抛出 GDI 异常而告终。