2016-09-17 5 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

紙に絵文字を描くのはかなり賢明ではありません。あなたは、モニターとプリンタの解像度の大きな大きな違いの効果を発見します。画面上のすべてのピクセルは6x6の塊に変わり、非常に粒状に見え、長い腕を持つときにのみよく見えます。しかし、これをやりたければDrawToBitmap()メソッドを使う必要があります。 Graphics.ClipプロパティはRegionも受け入れます。 –

+0

@SamKuhmonenどのようにクリッピング領域を設定できますか? –

答えて

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

2番目のコードスニペットを使用していますか? –

+0

私は2番目のコードスニペットを試みましたが、それは動作しません。それはまだ円ではない元のイメージを印刷します –

関連する問題