ImageSaveOptions imageOptions = new ImageSaveOptions(SaveFormat.Png);
imageOptions.PaperColor = Color.Transparent;
imageOptions.Resolution = 200; // 设置分辨率
var memoryStream = new MemoryStream();
shape.GetShapeRenderer().Save(memoryStream, imageOptions);
memoryStream.Flush();
memoryStream.Position = 0;
File.WriteAllBytes($@"E:\pic\{DateTime.Now.ToString("yyyyMMddHHmmss")}_{Guid.NewGuid().ToString("N")}.png", memoryStream.ToArray());
使用上述代码,GetShapeRenderer将OLE公式保存到MemoryStream中然后再保存到本地。公式会有有渲染不太好的情况。如下方图片。但是使用保存到文件,却是正常的。shape.GetShapeRenderer().Save(Path.Combine(Application.StartupPath, “math_sample”, imageName), imageOptions);


请给予解决办法,谢谢!
@Calvin95
在使用 GetShapeRenderer().Save 方法将 OLE 公式渲染到 MemoryStream 时,您遇到了渲染质量不佳的问题,而直接保存到文件时效果正常。这种情况可能与内存流的处理方式有关。
为了改善渲染质量,您可以尝试以下步骤:
- 增加分辨率:尝试将
imageOptions.Resolution 设置为更高的值,例如 300 或 600,以提高输出图像的清晰度。
- 使用文件保存:如果直接保存到文件效果更好,您可以考虑先将图像保存到文件,然后再从文件读取到内存流中。这是一个简单的解决方案。
以下是修改后的代码示例:
ImageSaveOptions imageOptions = new ImageSaveOptions(SaveFormat.Png);
imageOptions.PaperColor = Color.Transparent;
imageOptions.Resolution = 300; // 提高分辨率
// 保存到临时文件
string tempFilePath = Path.Combine(Application.StartupPath, "temp_image.png");
shape.GetShapeRenderer().Save(tempFilePath, imageOptions);
// 从文件读取到内存流
var memoryStream = new MemoryStream(File.ReadAllBytes(tempFilePath));
memoryStream.Position = 0;
// 继续处理 memoryStream...
通过这种方式,您可以利用文件保存的优势,同时仍然能够在内存中处理图像。希望这能解决您的问题!如果还有其他疑问,请随时询问。
目前的业务,需要以MemoryStream的方式存放和上传。是否还有其他的办法可以优化?
@Calvin95 感谢您报告此问题。 我们已经在我们的内部问题跟踪系统中打开了以下新工单,并将根据 免费支持政策 中提到的条款提供它们的修复:
Issue ID(s): WORDSNET-28780
如果您需要优先支持以及直接联系我们的付费支持管理团队,您可以获得 付费支持服务 。