gpt4 book ai didi

wolfram-mathematica - .NETLink 图形生成 PNG 而不是 EMF

转载 作者:行者123 更新时间:2023-12-04 08:01:45 25 4
gpt4 key购买 nike

下面的 C# 代码应该生成一个 EMF,但查看输出(在 Vim 中)显示它是一个 PNG。也许有人在 S.O.知道一个好的解决方法或解决方案。

MathKernel k = new MathKernel();
k.CaptureGraphics = true;
k.GraphicsFormat = "Metafile";
k.Compute("Show[Graphics[{Thick, Blue, Circle[{#, 0}] & /@ Range[4], Black, Dashed, Line[{{0, 0}, {5, 0}}]}]]");
k.Graphics[0].Save("C:\\Temp\\file.emf", System.Drawing.Imaging.ImageFormat.Emf);

到目前为止,我正在考虑将 Show[Graphics...] 包装在 ExportString[... , "EMF"] 中并使用 MathKernel Result 属性收集结果。

附录

MathKernel.Graphics 属性[1] 显然是一种 .Net Graphics 方法,它只处理位图等图像文件,而不处理基于矢量图形的增强图元文件。

  1. http://reference.wolfram.com/legacy/v7/NETLink/ref/net/Wolfram.NETLink.MathKernel.Graphics.html

增强型图元文件可以通过 .NETLink 一次传输一个,方式如下:

using System;
using System.IO;
using Wolfram.NETLink;

public class Example
{
public static void Main(String[] args)
{
MathKernel k = new MathKernel();
k.Compute("ExportString[Graphics[{Disk[]}], {\"Base64\", \"EMF\"}]");
byte[] decodedBytes = Convert.FromBase64String(k.Result.ToString());
// The transferred EMF can be used or simply written out to file.
File.WriteAllBytes("C:\\Temp\\file.emf", decodedBytes);
}
}

最佳答案

这是一个可行的解决方案:

using System;
using Wolfram.NETLink;

public class Example {

public static void Main(String[] args) {

MathKernel k = new MathKernel();
k.Compute("Export[\"c:/users/arnoudb/out.emf\", Graphics[{Disk[]}], \"EMF\"]");
}

}

我不确定你为什么考虑这部分:

k.Graphics[0].Save("C:\\Temp\\file.emf", System.Drawing.Imaging.ImageFormat.Emf);

一个 Mathematica 错误,因为 k.Graphics[0] 是一个纯 C# System.Drawing.Image 类。也许你可以澄清一下这部分?

关于wolfram-mathematica - .NETLink 图形生成 PNG 而不是 EMF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7542828/

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