0

我想打印windows窗体,然后我用了两种方法,

1.使用visual basic power pack工具调用"PrintForm"

 private void btnPriint_Click(object sender, EventArgs e)
        {
            printForm1.Print();
        }

2.gdi32.dll配合BitBlt功能使用

但是这两种方法都会得到低质量的打印,如下图所示。

在此处输入图像描述

但问题是我会这样做VB6,它会以清晰的打印正确打印

Private Sub Command1_Click()
  Me.PrintForm
End Sub

在此处输入图像描述

如何提高打印质量?(我正在使用带有 Windows 7 Ultimate 的 Visual Studio 2008 SP1)

4

1 回答 1

1

您可以创建位图图像以在表单中呈现像素:

// Assuming this code is within the form code-behind,
// so this is instance of Form class.
using (var bmp = new System.Drawing.Bitmap(this.Width, this.Height))
{
   this.DrawToBitmap(bmp, new Rectangle(0, 0, this.Width, this.Height));
   bmp.Save("formScreenshot.bmp"); //or change another format.
}

为了保持干净,您可以创建扩展方法。例如:

public static class FormExtentions
{
    public static System.Drawing.Bitmap TakeScreenshot(this Form form)
    {
        if (form == null)
           throw new ArgumentNullException("form");

        form.DrawToBitmap(bmp, new Rectangle(0, 0, form.Width, form.Height));

        return bmp;
    }

    public static void SaveScreenshot(this Form form, string filename, System.Drawing.Imaging.ImageFormat format)
    {
        if (form == null)
           throw new ArgumentNullException("form");
        if (filename == null)
           throw new ArgumentNullException("filename");
        if (format == null)
           throw new ArgumentNullException("format");

        using (var bmp = form.TakeScreenshot())
        {
            bmp.Save(filename, format);
        }
    }
}

表单代码隐藏中的用法:

this.SaveScreenshot("formScreenshot.png",
                    System.Drawing.Imaging.ImageFormat.Png); //or other formats

注意: DrawToBitmap将仅绘制屏幕上的内容。

编辑:虽然 OP 中的图像是png您可以使用:bmp.Save("formScreenshot.png", System.Drawing.Imaging.ImageFormat.Png);

于 2013-06-01T07:21:14.660 回答