缩放和打印位图对象
本文关键字:对象 位图 打印 缩放 | 更新日期: 2023-09-27 18:17:22
我有一个用DrawToBitmap方法绘制几个控件创建的位图对象。现在我想打印位图。然而,位图太大,无法容纳在单个页面上,因此必须缩小。我正在尝试使用下面的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);
}
请注意,定向的宽度和高度是这样构造的,因为位图的宽度远远大于它的高度(即宽度始终是限制尺寸)。
我的问题是,图像最终是非常模糊,当它打印。我的比例不对吗?我有一种感觉,可能有一些问题与GraphicsUnit之间的e.MarginBounds和图像尺寸不匹配。如有任何帮助,不胜感激。
(更新)我尝试使用下面评论中给出的方法调整位图的大小,但图像仍然打印模糊。为了测试,我将原始和调整大小的位图都保存为文件,在Windows Photo Viewer中打开它们,并尝试从那里打印它们。调整大小的图像打印模糊,就像它从我的c#应用程序,但原始图像打印漂亮;无论Windows照片查看器使用什么算法来调整单个页面的大小,都不会导致图像模糊。
我想知道,Windows照片查看器在调整打印大小时是否会增加像素密度?也许这就是为什么在代码中调整它的大小会导致它变得模糊;原点像素密度不足以清晰显示缩放后的图像。
看起来不像是在保留长宽比。你需要计算原始图像的宽度与高度的比例,并确保缩放输出图像,使其尺寸具有相同的比例。
基本上:
1 -计算纵横比。
2 -找到目标尺寸的最大尺寸。
3 -调整输出大小,使最大尺寸匹配,并将较小的尺寸设置为较大的尺寸乘以比率。
编辑
检查图形。dpiX和. dpiy属性来查看您的打印机在水平方向和垂直方向上的DPI是否不同。如果它们是不同的,你将不得不应用一些额外的调整尺寸