缩放和打印位图对象

本文关键字:对象 位图 打印 缩放 | 更新日期: 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是否不同。如果它们是不同的,你将不得不应用一些额外的调整尺寸