2014-05-14 99 views
1

我正在使用GDI +在PictureBox上绘制初始图像 - 该图像呈现干净的图像。我试图然后捕获该绘图并使用PDFSharp在PDF上绘制它,但出现模糊。我相信这与我改变了目标Rectangle大小的事实有关。我需要做些什么来清理它?DrawToBitmap使图像模糊

代码:

Dim bmp As New Bitmap(pb.Width, pb.Height) 
Dim pdf As New PdfDocument 
Dim page As PdfPage = pdf.AddPage 
Dim g As XGraphics = XGraphics.FromPdfPage(page) 
pb.DrawToBitmap(bmp, New Rectangle(pb.ClientRectangle.X, pb.ClientRectangle.Y, pb.Width, pb.Height + 20)) 
g.SmoothingMode = XSmoothingMode.AntiAlias 
g.DrawImage(bmp, New XRect(New RectangleF(20, 0, 600, 800))) 
pdf.Save(_path) 
+1

您是否尝试过在“原生”的决议倾出PB,看它是否是模糊的?那就是我要开始的地方... –

+0

是的,我做到了。谢谢 – OneFineDay

回答

3

这是抗锯齿,使图像模糊。 AFAIK Adob​​e Reader在与PDFsharp一起使用时绘制具有抗锯齿功能的图像。

随着PDFsharp创建您的BMP的XImage,然后设置

image.Interpolate = false; 

为XImage。这会给Adobe Reader一个提示,即该图像不需要消除锯齿。对于屏幕截图,缩小时(例如,从800x600屏幕取得400x300位图时)抗锯齿功能非常有用,但在按比例放大时(例如Adobe Reader将对嵌入PDF文件的图像执行操作时)不起作用。

参见:
http://forum.pdfsharp.net/viewtopic.php?p=5370#p5370

1

如果您缩放图像时,它就会出来模糊。没有其他方法,因为图像中没有附加信息,只会以某种方式插入。没有“放大和增强”按钮。 :-)

我在其中一个程序中做了什么,我想将控件当前的外观保存到一个文件中,首先是将控件缩放到所需的大小,然后将其绘制到位图,然后调整大小再次。

如果这项工作取决于当然控制的内容,是否可扩展或不可扩展等等。

例如

在下面的示例中,我在我的导出对话框workingChart中使用了一个Chart控件。 所使用的步骤是:

  • 保存旧大小
  • 调整大小图表到所需的大小
  • 画出控制为位图
  • 调整大小图表回旧大小

这效果很好,图像清晰,因为您不会调整图像本身的大小。

Private Function GetChartScaledImage(wantsize As Size) As Bitmap 
    Dim oldsize As Size = workingChart.Size 
    Dim bmp As New Bitmap(wantsize.Width, wantsize.Height) 
    workingChart.Size = wantsize 
    workingChart.DrawToBitmap(bmp, New Rectangle(0, 0, wantsize.Width, wantsize.Height)) 
    workingChart.Size = oldsize 
    Return bmp 
End Function