问题标签 [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 投票
1 回答
420 浏览

c# - 生成多个图形对象以并行使用

我正在尝试创建一个可用于绘制元文件的图形对象,但我不确定最好的方法是什么。最终,元文件将包含在 Word 文档中,我们希望它们在打印时看起来不错。

起初我有这样的事情:

这可行,但我想并行处理多个图像,在这种情况下会产生错误,因为它们都试图使用相同的图形对象。

所以我尝试了(基于一些在线创建图形对象的建议):

但它仍然有同样的问题。显然CreateMeasurementGraphics每次都给你相同的图形对象。

我可以用 a 包装代码lock以使其他线程等待。也许我应该。但是有没有更好的方法来生成Graphics能够产生体面的可打印元文件的独立对象?

0 投票
0 回答
141 浏览

vb.net - 将 bmp 文件放入 RichTextBox:在不损失质量的情况下调整大小 + 处理窗口缩放

目标:

我的目标是将图片(bmp 文件)以我选择的大小(例如 400 像素高和宽度缩放以匹配)放入 RichTextBox 中,而不会被 Windows 缩放(125%、150%、200% 等)破坏.),或失去质量。

这是我的代码:

这是我运行子程序时 RTB 发生的情况: https ://i.imgur.com/rqChD4Q.png

背景和我尝试过的

我的第一个尝试是只使用位图大小属性,但这真的会破坏质量 - 它完全没用。

然后我发现了这种对质量进行分类的神奇方式。简而言之,这是这里的最佳答案:https ://social.msdn.microsoft.com/Forums/vstudio/en-US/355bfc59-cd0a-4e81-984e-9f066fd3a897/richtextbox-images-quality-loss?forum= VB通用

总之,它制作了一个元文件和图形,使用它调整大小并将其放入剪贴板,然后将其粘贴到 Richtextbox 中。

我得到了很好的工作。但是,我将 4K 屏幕缩放为 200%,这意味着图片大小合适,但放入的图元文件大小是原来的两倍。

我花了大约 4 个小时在谷歌上搜索并尝试了我能找到的一切来解决这个问题。无论我做什么,我为表单或其中的控件获得的 DPI 始终为 96,因此我无法使用其中一种 DpiX 解决方案。

如果我添加:

它只是使表单未缩放(尽管某些按钮和标签仍然被缩放 - 很奇怪!)

试图覆盖 scalecontrol 事件总是返回一个 factor.X,factor.Y = 1,从来没有其他任何东西。

如果可能的话,我想要什么:

请注意,最好的解决方案是只获取比例因子的数字。125% = 1.25, 150% = 1.5 等等。如果我有这个数字,我可以将图形的尺寸乘以它,它非常适合(例如)

我认为我的主要问题是我使用太多我不理解的代码来完成这项工作。我真的很感激你在回答时能记住这一点,如果它给了我太多怀疑的好处,我可能无法理解你的回答。我认为解决方案可能在这里:https ://msdn.microsoft.com/en-us/library/cc250585.aspx

但这在我看来是遥不可及的。因此,任何帮助或建议将不胜感激。

仅供参考,我的目标是 3.5,如果可能的话,我想坚持下去。

0 投票
1 回答
97 浏览

c# - 查找 C# 元文件的最后绘制像素

我有一个 Metafile 对象。由于我无法控制的原因,它提供的尺寸比适合在其中绘制的图像所需的尺寸大得多(大几千倍)。

例如,它可能是 40 000 x 40 000,但仅包含 2000 x 1600 区域中的“真实”(非透明)像素。

最初,这个元文件只是简单地绘制到一个控件上,控件边界将区域限制在一个合理的大小。

现在我试图根据用户输入将它分成不同的动态大小块。我想要做的是计算其中有多少块(在 x 和 y 中,甚至分割成二维网格的块)。

我知道,从技术上讲,我可以采用 O(N²) 的方式,只需逐个检查像素即可找到绘制图像的“真实”边界。

但这会非常缓慢。

我正在寻找一种方法来获取整个图元文件中最后一个绘制像素的位置(x,y),而无需遍历它们中的每一个。

在此处输入图像描述

由于 DrawImage 方法的速度并不慢,至少不是 N² 慢,我假设图元文件对象在内部进行了一些优化,允许这样的事情。就像 List 对象有一个比实际计数对象快得多的 .Count 属性一样,是否有某种方法可以获取元文件的实际边界?

在这种情况下,绘制的内容将始终是矩形的。我可以放心地假设最后一个像素是相同的,无论我是先循环 x 然后 y,还是先循环 y 然后 x。

如何找到这个“最后一个”像素的坐标

0 投票
1 回答
524 浏览

c# - 如何使 emf 文件 dpi 感知

我正在努力尝试在 Windows 上使用可识别 dpi 的 emf 文件。主要问题来自于他们不以 dpi 感知方式处理文本。例如,无论屏幕的分辨率如何,或者内部的电动势如何,从电动势获得的图形对象总是报告 96 dpi。这使得无法正确处理文本。

在我的情况下,我得到了一个以英寸为单位的图像尺寸,我需要让我的绘图适合这个尺寸。绘图是带有图例、标题和轴名称的 XY 图形。我使用 MeasureString 的结果为布局设置填充变量。emf 没有将正确的 dpi 返回到它的 Graphic 对象的事实导致文本随着缩放/分辨率远离 96 移动而逐渐变差,并且由于填充不同,布局也发生了变化。

这是代码:

首先计算显示设置比例因子

接下来创建元文件

最后调用绘图代码。绘图代码采用像素大小,而不是英寸。请注意,文件的大小(以像素为单位)是用户定义的比例因子的大小,其中 100% 假定为 g.Dpi(即 96)。对于我测试过的所有显示器,这一假设已被证明是正确的。

0 投票
0 回答
91 浏览

.net - 在 openxml 创建的 powerpoint 部分(emf)中使用自定义字体

我们使用 .net/c# 生成服务器端 pptx 文档。这些 pptx 包含 emf 图像和一些文本字段。对于绘制文本,我们使用安装在服务器上的自定义字体。如果我们将这些 pptx 发送给我们的客户,我们会将字体嵌入到 pptx 中,并且使用自定义字体正确显示文本字段。
emf 也在服务器上创建并添加到文档中。这些 emf 可能包含一些使用自定义字体的文本绘图,但如果客户计算机上未安装该字体,则 powerpoint 使用系统标准字体。如果安装了字体,则 emf 文本是正确的。
是否可以告诉 powerpoint 也将嵌入字体用于 emf?

0 投票
2 回答
713 浏览

r - Microsoft 更新后 MS Word 2010 中的 devEMF 输出显示问题

在 6 月 12 日 2-4 次 Microsoft 更新之后,MS Word 2010 中 devEMF(用于 EMF/EMF+ 文件的 R 打印设备)输出的显示已损坏。

该问题发生在安装了最新 Microsoft 更新的计算机上,而未安装KB890830KB4503292KB4503286KB4461619的计算机上则不会出现此问题。我在 Windows 10 和 Windows 7 上进行了尝试。所有有问题的更新我都认为是安全更新,所以我猜 devEMF 文件在更新之后对 MS Word 来说看起来很可疑,但之前不是。使用其他程序创建的 EMF 正确显示。我尝试使用 EMF 和 EMF+,它们都显示已损坏。

以下 R 代码生成一个文件,该文件在 libreOffice 中正确显示,但在 MS Word 2010 中已损坏,并带有最新的 MS 更新

一些(比如这个测试图像)根本不显示(我只是得到一个非常浅的图像大小的框架),在另一些中只显示很少的元素(/layers?),通常带有红十字和一些关于的元信息文件(如以下屏幕截图所示)。

这是典型的图像损坏显示。 轴没有标记或根本不显示,元信息在左上角是可读的 我的问题是......(除此之外,我真的希望这些 emfs 能够在我的数百页和数字长文档中正确显示): Word 现在是否过于担心,或者 devEMF 包是否需要进行(希望很小)更正它更安全吗?

0 投票
0 回答
173 浏览

c# - 如何将 System.Drawing.Image 作为元文件插入 Word 文档?

我在将元文件图片从代码插入 Word 文档时遇到问题。我需要插入已经加载为 的图片System.Drawing.Image,而不是来自路径。方法:

不会工作。

我尝试使用该Paste()方法,但它抛出异常:

System.Runtime.InteropServices.COMException:命令错误

我怎样才能做到这一点?

希望找到解决方案,感谢@Jimi!我犯了一个错误:

不是

0 投票
1 回答
223 浏览

c++ - 如何从 GDI+ 图元文件对象中获取原始图元文件字节?

我知道我可以从 GDI 的HENHMETAFILE usingGetEnhMetaFileBits函数中获取原始元文件字节。但是如何从 Gdiplus::MetafileGDI+ 的对象中获取原始字节?

0 投票
1 回答
184 浏览

c++ - EmfToWmfBits api 总是返回 0

我想使用 EmfToWmfBits api。首先我会尝试创建一个 Metafile 类,然后调用这个 api。我认为问题在于我创建课程的方式。

这种方式给了我对象 myMetafile,但它什么都不包含。我的意思是这个对象中的 nativeimage 是 NULL,它应该指向我磁盘上的元文件。所以后来当我调用 EmfToWmfBits api 时,它给了我零。

我想问题可能是 Metafile 类应该采用 wchar 字符串。并且磁盘上的文件名不是 wchar?我试过这样。

还有这个。

我确信 emf 文件与 exe 位于同一目录中。但他们都失败了。

这是我使用的代码。

通常,这个 EmfToWmfBits api 应该返回转换后文件的长度。这个api的细节在这里。 https://docs.microsoft.com/en-us/windows/win32/api/gdiplusheaders/nf-gdiplusheaders-metafile-emftowmfbits 如果有人可以在这里帮助我,我将不胜感激。

0 投票
0 回答
63 浏览

c# - 如何将元文件的颜色设置为特定值?

我需要将元文件中所有可用对象的颜色更改为特定颜色。但是,当前提供的仅用于平移/缩放/旋转颜色。例如,我需要将所有可用对象的颜色设置为绿色。

下面目前讨论的是只是相对地改变颜色,而不是绝对地改变颜色:

https://docs.microsoft.com/en-us/dotnet/framework/winforms/advanced/recoloring-images

如何在 C# 中更改 EMF+ 图像的颜色

这段代码可以做的只是将所有颜色转换为白色。但我需要将所有颜色设置为例如绿色、深红色等。有没有办法做到这一点?