0

我目前正在开发一个 C# 应用程序,该应用程序旨在在 pdf 文件中进行一些计算和输出图形。

我使用 Zedgraph 库来绘制图形,例如 graphPane.AddCurve(PointPairList)。现在我尝试通过 MigraDoc 包将这些图表输出到 pdf 文件。

目前,我有一个脚本将 Zedgraph 映射到位图,然后将其粘贴到 pdf 文件上。所以是这样的:

private Bitmap getBitMap()
{

  ZedGraphControl graph = new ZedGraphControl();

  newGraph = graphPane.Clone();

  SizeF s = new SizeF(3.5f, 4.5f);
  newGraph.Scale(s);

  newGraph.DrawToBitmap(bit, new Rectangle(0, 0, newGraph.Width,    newGraph.Height));

  return bit;

}

问题是这在 pdf 页面上给了我一个稍微像素化的图像。我需要这张图表质量很高。那么有什么我可以改变以提高质量还是我必须改变我的整个方法来解决这个问题。

非常感谢你。

4

1 回答 1

0

默认情况下,Bitmap您创建的当前屏幕分辨率可能低至75dpi更常见96dpi;更现代的显示器有120dpi或更多,但良好的打印质量开始150dpi。对于您想要的真正 crips 图像300dpi并允许缩放您可能想要600dpi或更多..

因此,您需要创建和填充更大尺寸的位图并控制其 dpi 分辨率。

假设你的尺寸3.5f x 4.5f是英寸,因为300dpi你需要一个Bitmap像素1050 x 1350

所以你应该创建这样一个Bitmap..:

Bitmap bmp = new Bitmap(1050, 1350);

..并设置分辨率:

bmp.SetResolution(300, 300);

要填充它,您的控件必须具有相同的大小:

newGraph.ClientSize = bmp.Size;

现在DrawToBitmap应该创建一个清晰且适合放大的图像。

请注意,控件是否太大而无法显示在屏幕上并不重要;DrawToBitmap仍然可以工作。

更新除了足够的分辨率之外,绘制质量线等也很有趣。 ZedGraph 的一个特点是可以打开Antialiasing,无论是单独的线:

curve_x.Line.IsAntiAlias = true;

或其他元素:

myPane.XAxis.Scale.FontSpec.IsAntiAlias = true;

或整个图表:

zedGraphControl1.IsAntiAlias = true;

所有示例均取自这篇文章

于 2016-03-22T07:36:06.640 回答