2017-07-07 159 views
0

私はPDFファイルを作成するためにPDFシャープを使用しており、ページに画像を置くことに成功しました。PDFsharpで円形画像を描くには

 byte[] imgBytes = interview.Application.CandidateImage.ImageBinary.ToArray(); 
     Stream stream = new MemoryStream(imgBytes); 
     MemoryStream strm = new MemoryStream(); 
     System.Drawing.Image img = System.Drawing.Image.FromStream(stream); 
     img.Save(strm, System.Drawing.Imaging.ImageFormat.Png); 

     XImage xfoto = XImage.FromGdiPlusImage(img); 

     gfx.DrawImage(xfoto, 30, 130, 300, 300); 

これはバイナリイメージデータを取得し、DrawImageはこのイメージをストリームから取得して描画します。

HTML上でimg-circleクラスを使用したかのようにイメージを丸くしたいです。 PDFsharpでこれに対応する関数はありますか?そうでない場合は、どうすればいいですか?

EDIT:中心部で唯一の丸い部分が見えるように

void DrawClipPath(XGraphics gfx, PdfPage page) 
    { 


     XGraphicsPath path = new XGraphicsPath(); 
     path.AddEllipse((page.Width/2) - 150, (page.Height/2) - 120, 300, 300); 
     gfx.Save(); 
     gfx.IntersectClip(path); 

     // Draw a beam of dotted lines 
     XPen pen = XPens.DarkRed.Clone(); 
     pen.DashStyle = XDashStyle.Dot; 
     for (double r = 0; r <= 90; r += 0.5) 
      gfx.DrawLine(pen, 0, 0, 250 * Math.Cos(r/90 * Math.PI), 250 * Math.Sin(r/90 * Math.PI)); 

     gfx.Restore(); 


    } 

答えて

1

円をクリップパスとして設定し、イメージを描画することができます。クリップのパスを設定する前にグラフィックステート(XGraphics.Save)を保存してから、クリップする必要があるすべてのオブジェクトを描画した後で(XGraphics.Restore)復元する必要があります。

編集:私はPDFSharpのAPIに精通していないんだが、コードは次のようなものになります。

gfx.Save(); 
XGraphicsPath clipPath = new XGraphicsPath(); 
clipPath.AddEllipse(30, 130, 300, 300); 
gfx.IntersectClip(clipPath); 
gfx.DrawImage(xfoto, 30, 130, 300, 300); 
gfx.Restore(); 
+0

私はクリップパスが何をしているのかよく分かりません。サンプルコードを手伝ってもらえますか? – Dukakus17

+0

私の編集を見ていただけますか?私はウェブサイトの例に従ったようなことをしました。しかし、イメージは同じままです。私のエラーを訂正できますか? – Dukakus17

+0

@ user7677413私の編集を参照して、画像(またはクリップしたい他のオブジェクト)を描いた後にグラフィックを復元します。 – iPDFdev

1

あなたは透明で画像を使用することができます。

ハックを使用する:画像を最初に描画し、次に画像の上に白いマスクを描き、円形の部分だけを中央に表示します。

+0

実際にスマートです。しかし、コードで2番目のオプションを実行する方法がわかりません。手伝ってくれる? – Dukakus17

+0

Graphicsサンプルを見てください:http://pdfsharp.net/wiki/Graphics-sample.ashx巻線を使ったDrawPathサンプルは、楕円を穴として描画します。 Windingを使用するDrawPolygonサンプルもあります。 DrawPathが最も効率的な方法であるかどうかはわかりませんが、約12行のコードしか必要としません。 –

+0

私たちは正方形を描いて透明な穴を作るのですか? – Dukakus17