我使用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)
答案 0 :(得分:3)
使图像模糊的抗锯齿。 当与PDFsharp一起使用时,AFAIK Adobe Reader会绘制带抗锯齿的图像。
使用PDFsharp从您的BMP创建一个XImage,然后设置
image.Interpolate = false;
表示XImage。这将向Adobe Reader提示该图像不需要消除锯齿。
对于屏幕截图,抗锯齿功能在缩小时非常有用(例如,从800x600屏幕拍摄400x300位图时),但放大时不会(如Adobe Reader将对PDF文件中嵌入的图像进行处理)。< / p>
答案 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