打印时图像质量低

时间:2015-12-05 22:33:43

标签: c# printing

我有一个图片框,我需要打印它。

应用程序打印它,这是打印代码:

FileOutputStream fos = new FileOutputStream(file, true);

唯一的问题是图片非常模糊。这是最后的picture

有谁知道如何解决这个问题?

(P.S最终图像必须为189(宽度)和132(高度))

1 个答案:

答案 0 :(得分:0)

您需要明确设置要打印图像的dpi

您的输入和所需的输出具有相同的比率。如果这是你想要的,你需要分别计算宽度和高度的必要dpi值。

我以一种明确的方式对其进行编码,以使其最易理解。

另请注意,您始终应使用ClientSizeClientRectangle属性,因此您可以自由设置任何BorderStyle,因为Width外部< / strong>宽度..

    private void Doc_PrintPage(object sender, PrintPageEventArgs e)
    {
        float x = e.MarginBounds.Left;
        float y = e.MarginBounds.Top;
        bmp = new Bitmap(pictureBox1.ClientSize.Width, pictureBox1.ClientSize.Height);

        float tgtWidthMM = 50;  // 5cm
        float tgtHeightMM = 35;  // 3.5cm
        float tgtWidthInches = tgtWidthMM / 25.4f;
        float tgtHeightInches = tgtHeightMM / 25.4f;
        float srcWidthPx = bmp.Width; //  633
        float srcHeightPx = bmp.Height; //  381
        float dpiX = srcWidthPx / tgtWidthInches;
        float dpiY = srcHeightPx / tgtHeightInches;

        bmp.SetResolution(dpiX, dpiY);

        pictureBox1.DrawToBitmap(bmp, pictureBox1.ClientRectangle);
        e.Graphics.DrawImage((Image)bmp, x, y);
    }

还要将ImageFormat参数添加到Save来电:

using System.Drawing.Imaging;
...

bmp.Save(Application.StartupPath + "\\"+ tempstr +"\\" + temp1 + temp2 +
         temp3 + temp4 + temp5 + temp6 + ".jpg", ImageFormat.Jpeg);

..或者保存的成功与否也取决于从jpg创建的来源。

但是,当然,无论你做得对,如果源中的质量不够,结果都无法改变。看看你的例子,我想知道图像的来源是什么?

  • 如果您使用LabelsTextBoxes创建文字,那么您真的应该通过打印事件中的DrawString调用来编写这些文本,因为这只会导致高 - 质量输出。

  • 如果您要将其加载到PictureBox我想知道您为什么不直接使用源图像。另外:如果您(ab)使用PictureBox作为缩放工具,则可以预期模糊。不要那样做!而是使用带有源矩形和目标矩形的重载来仅缩放DrawImage调用!但同样,输入的质量限制了输出的质量!