DrawToBitmap使图像模糊

时间:2014-05-14 05:26:58

标签: vb.net gdi+ pdfsharp

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

代码:

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) 

2 个答案:

答案 0 :(得分:3)

使图像模糊的抗锯齿。 当与PDFsharp一起使用时,AFAIK Adob​​e Reader会绘制带抗锯齿的图像。

使用PDFsharp从您的BMP创建一个XImage,然后设置

image.Interpolate = false;

表示XImage。这将向Adobe Reader提示该图像不需要消除锯齿。

对于屏幕截图,抗锯齿功能在缩小时非常有用(例如,从800x600屏幕拍摄400x300位图时),但放大时不会(如Adobe Reader将对PDF文件中嵌入的图像进行处理)。< / p>

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

答案 1 :(得分:1)

如果向上缩放图像,它会变得模糊。没有其他办法,因为图像中没有其他信息,只会以某种方式进行插值。没有“放大和增强”按钮。 : - )

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

如果这样做取决于控制的内容,当然,它是否可扩展,等等。

e.g。

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

  • 保存旧尺寸
  • 将图表调整为所需大小
  • 将控件绘制到位图
  • 将图表调整为旧尺寸

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

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