我目前正在开发一个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页面上略微像素化的图像。而且我需要这个图表具有非常高的质量。那么有什么我可以改变提高质量或者我必须改变我的整个方法来做这件事。
提前非常感谢你。
答案 0 :(得分:0)
默认情况下,您创建的Bitmap
具有当前的屏幕分辨率,可能低至75dpi
,更常见96dpi
;更现代的显示器有120dpi
或更多,但良好的打印质量开始150dpi
。对于您想要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;
所有示例均为from this post。