大家好!我想把panel打印出来(里面有图片和文字),用的是把panel转化成图片打印,可是效果很差,请问还有其他方法吗?或者如何提高转换出来的图片效果??我的代码如下:
 private void button4_Click(object sender, EventArgs e)
        {
            Graphics g1 = panel2.CreateGraphics();
            g1.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            g1.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            g1.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            g1.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;            //g1.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
            //g1.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
            //g1.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;            myImage = new Bitmap(this.panel2.Width, this.panel2.Height, g1);
            Graphics g2 = Graphics.FromImage(myImage);
            g2.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            g2.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            g2.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;            
            g2.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
            IntPtr dc1 = g1.GetHdc();
            IntPtr dc2 = g2.GetHdc();
            BitBlt(dc2, 0, 0, this.panel2.Width, this.panel2.Height, dc1, 0, 0, 13369376);
            g1.ReleaseHdc(dc1);
            g2.ReleaseHdc(dc2);
            myImage.RotateFlip(RotateFlipType.Rotate90FlipNone);
            myImage.Save("c:/aa.bmp");
            PageSetupDialog mypgDialog = new PageSetupDialog();
            mypgDialog.Document = printDocument1;            try
            {
                mypgDialog.ShowDialog();
            }
            catch
            {
                printDocument1.PrintController.OnEndPrint(printDocument1, new System.Drawing.Printing.PrintEventArgs());
            }
            //*****************************            PrintPreviewDialog dlg = new PrintPreviewDialog();            dlg.Document = printDocument1;
            dlg.Document.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("cardc", 204, 324);            if (dlg.ShowDialog() == DialogResult.OK)
            {
                printDocument1.Print();
            }            g1.Dispose();        }
        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            e.Graphics.DrawImage(myImage, 0, 0);
    }

解决方案 »

  1.   

    本来Panel转换成截图打印就不清晰的。想要清晰的就一点一点的打印,用GDI+,
    private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
            {
                e.Graphics.DrawString
                  e.Graphics.DrawLine
                  e.Graphics.DrawImage
            }
      

  2.   

    Rock870210,一点一点打印能打印出整图的效果吗?希望你指点指点啊!!!
      

  3.   

    打印出panel上所有东西,包括控件等   public static Image GetMap(Panel pnl)
            {
                int w, h;            if (pnl.VerticalScroll.Visible && pnl.HorizontalScroll.Visible)
                {
                    w = pnl.HorizontalScroll.Maximum;
                    h = pnl.VerticalScroll.Maximum;
                }
                else if (pnl.VerticalScroll.Visible && !pnl.HorizontalScroll.Visible)
                {
                    w = pnl.Width - SystemInformation.VerticalScrollBarWidth;
                    h = pnl.VerticalScroll.Maximum;
                }
                else if (!pnl.VerticalScroll.Visible && pnl.HorizontalScroll.Visible)
                {
                    w = pnl.HorizontalScroll.Maximum;
                    h = pnl.Height - SystemInformation.HorizontalScrollBarHeight;
                }
                else
                {
                    w = pnl.Width;
                    h = pnl.Height;
                }            Image m = new Bitmap(w, h);
                Graphics g = Graphics.FromImage(m);
                g.Clear(pnl.BackColor);
                foreach (Control c in pnl.Controls)
                {
                    Bitmap b = new Bitmap(c.Width, c.Height);
                    c.DrawToBitmap(b, new Rectangle(new Point(0, 0), c.Size));
                    g.DrawImage(b, c.Location);
                }            return m;
            }
      

  4.   

    qiuxin425刚测试过你的代码,显示效果是一样的,还是字体有锯齿,图片不清晰
      

  5.   


    那就没有办法了,只能向你绘制的方式一步步打印出来了,在打印机的print里面写代码了