C# 当我打印位图时,它会吃掉一些位图

C# 当我打印位图时,它会吃掉一些位图,c#,bitmap,printdocument,printdialog,C#,Bitmap,Printdocument,Printdialog,在我的应用程序中,我有一个被面板包围的图表。我从工具箱中添加了一个printdocument组件,当我想要打印图表时,我创建了一个位图,我在位图中得到了面板(结果是面板中的图表)。我的问题是,当我创建位图时,当我将它发送到打印机打印它时,它会吃掉底部和右侧的一些图表。下面是我执行此操作的代码 private void button1_Click(object sender, EventArgs e) { PrintDialog printDialog = new Prin

在我的应用程序中,我有一个被面板包围的图表。我从工具箱中添加了一个printdocument组件,当我想要打印图表时,我创建了一个位图,我在位图中得到了面板(结果是面板中的图表)。我的问题是,当我创建位图时,当我将它发送到打印机打印它时,它会吃掉底部和右侧的一些图表。下面是我执行此操作的代码

private void button1_Click(object sender, EventArgs e)
    {
        PrintDialog printDialog = new PrintDialog();
        printDialog.Document = printDocument1;
        printDialog.UseEXDialog = true;
        //Get the document

        if (DialogResult.OK == printDialog.ShowDialog())
        {
            printDocument1.DocumentName = "Test Page Print";
            printPreviewDialog1.Document = printDocument1;

            if (DialogResult.OK == printPreviewDialog1.ShowDialog())
            printDocument1.Print();
        }
    }
这是初始化打印文档的按钮。(我添加了一个打印预览,这样我就不必每次都打印它,也不必花费纸张和墨水)

我在想,也许图表太大了,它不适合页面,但如果我保存位图。它适合在页面内,实际上底部和右侧有太多的可用空间。(在“绘制到位图”功能之后添加

bm.Save(@"c:\LOAN_GRAPH.png");
而不是绘制图像,并且图像保存在c:)

任何能帮助我的人,我都会非常感激。

这很有效。 我移除了面板,取而代之的是根据图表创建矩形

Bitmap bm = new Bitmap(this.chart1.Width, this.chart1.Height);
    this.chart1.DrawToBitmap(bm, new Rectangle(50, 50, this.chart1.Width + 50, this.chart1.Height + 50));
    e.Graphics.DrawImage(bm, 0, 0);

因此,如果将生成的位图保存到磁盘时看起来很好,您是否尝试过将该图像发送到打印机?对我来说,这听起来更像是打印过程,调整图像以适应某些内容,然后裁剪图像的其余部分。如果你尝试这种过载会怎么样?e、 Graphics.DrawImage(bm,新矩形(Point.Empty,bm.Size),新矩形(Point.Empty,bm.Size),GraphicsUnit.Pixel);它起作用了。我移除了面板,取而代之的是根据图表创建矩形。位图bm=新位图(this.chart1.Width,this.chart1.Height);this.chart1.DrawToBitmap(bm,新矩形(50,50,this.chart1.Width+50,this.chart1.Height+50));e、 Graphics.DrawImage(bm,0,0);它就像一个符咒
Bitmap bm = new Bitmap(this.chart1.Width, this.chart1.Height);
    this.chart1.DrawToBitmap(bm, new Rectangle(50, 50, this.chart1.Width + 50, this.chart1.Height + 50));
    e.Graphics.DrawImage(bm, 0, 0);