2016-09-17 55 views
0

嗨我想让我的画框成为一个圆形 然后打印出来。画在画框上并打印出来

问题是我可以在窗体中看到图片框是圆形的,但当我预览它来打印它不是圆形。

这里是我的代码

public Form1() 
    { 
     InitializeComponent(); 


     //This makes picturebox1 circle 
     System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath(); 
     gp.AddEllipse(0, 0, pictureBox1.Width - 4, pictureBox1.Height - 4); 
     Region rg = new Region(gp); 
     pictureBox1.Region = rg; 
    } 


    //Preview the print 
    private void button1_Click(object sender, EventArgs e) 
    { 
     printPrev.Document = printDoc; 
     printPrev.ShowDialog(); 

    } 

    private void printDoc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 
    { 

     //Draw the picturebox on PDF 
     e.Graphics.DrawImage(pictureBox1.Image, 230, 230); 

    } 

感谢

+0

您的图片框圈,因为你告诉它是。但是当您打印时,您将打印图像,而不是图片框。你也必须为此设置一个剪辑区域。 –

+1

绘制一个picturebox到纸是非常不明智的,你会发现显示器和打印机分辨率之间的巨大差异的影响。屏幕上的每个像素都会变成6x6的墨水块,使其看起来非常有颗粒感,并且只有在拥有长臂时才会看起来不错。但是,如果你想这样做,那么你必须使用它的DrawToBitmap()方法。 Graphics.Clip属性也接受一个Region。 –

+0

@SamiKuhmonen如何设置剪辑区域?你能给我一些线索吗? –

回答

1

它不工作,因为你没有改变图像。 你只是在改变图形。 你可以做这样的事情。

  Bitmap bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height); 
      Graphics g = Graphics.FromImage(bitmap); 
      g.DrawEllipse(new Pen(new SolidBrush(Color.Black),3),0,0,bitmap.Width -4,bitmap.Height - 4); 
      pictureBox1.Image = bitmap; 

这也将解决你的问题

using (var bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height)) { 
       pictureBox1.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width,bmp.Height)); 
       e.Graphics.DrawImage(bmp, 230, 230); 
      } 
+0

它只是画了一个圆圈,但我的图片消失了。 –

+0

你在使用第二个代码片段吗? –

+0

我试过第二个代码片段,但它不起作用。它仍然打印原始图像而不是圆圈 –