我有一个通过DrawToBitmap方法绘制几个控件而创建的Bitmap对象。我现在想打印位图。但是,位图太大而无法放在单个页面上,因此必须缩小比例。我试图做的,使用的DrawImage以下过载:缩放和打印位图对象
public void PrintPageHandler(object sender, PrintPageEventArgs e)
{
Bitmap bitmap = GetBitmap();
Rectangle destRect = new Rectangle(
e.MarginBounds.X,
e.MarginBounds.Y,
e.MarginBounds.Width,
e.MarginBounds.Width * bitmap.Height/bitmap.Width);
e.Graphics.DrawImage(
bitmap,
destRect,
0,
0,
bitmap.Width,
bitmap.Height,
System.Drawing.GraphicsUnit.Pixel);
}
注意,destRect宽度和高度构造喜欢这样,因为位图更为广阔大于高度(即宽度始终是限制尺寸)。
我的问题是,图像打印时会变得非常模糊。我是否正确缩放了这个?我有一种感觉,e.MarginBounds和图像尺寸之间的GraphicsUnit不匹配可能存在一些问题。任何帮助,将不胜感激。
[UPDATE]
我试图调整使用在下面的评论中给出的方法的位图,但是图像仍然打印模糊。为了测试,我将原始位图和调整大小的位图都保存为文件,在Windows照片查看器中打开它们,并尝试从那里打印它们。经过调整大小的图像会像我在c#应用程序中那样模糊地打印,但原始图像打印效果非常好;无论采用哪种算法,Windows照片查看器用于调整大小到单个页面都不会导致图像变模糊。
我想知道,Windows照片查看器可以在调整打印大小时增加像素密度吗?也许这就是为什么在代码中调整它使其变得模糊的原因;原始像素密度不足以清楚地显示按比例缩小的图像。
http://www.switchonthecode.com/tutorials/csharp-tutorial-image-editing-saving-cropping-and-resizing –
您是否尝试过在e.Graphics上设置插值方法? I.e:e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; – Cheesebaron
@ Cheesebaron:我尝试过。它似乎没有太大的区别。 – jjoelson