【问题标题】:DrawToBitmap makes a blurry imageDrawToBitmap 使图像模糊
【发布时间】:2014-05-14 05:26:57
【问题描述】:

我正在使用 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) 

【问题讨论】:

  • 您是否尝试过以“本机”分辨率输出 pb 以查看它是否模糊?这就是我要开始的地方......

标签: vb.net gdi+ pdfsharp


【解决方案1】:

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

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

image.Interpolate = false;

对于那个 XImage。这将向 Adob​​e Reader 提示该图像不需要抗锯齿。

对于屏幕截图,抗锯齿在缩小时(例如,从 800x600 屏幕获取 400x300 位图时)很有用,但在放大时(就像 Adob​​e Reader 处理嵌入在 PDF 文件中的图像一样)。

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

【讨论】:

    【解决方案2】:

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

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

    p>

    这是否可行当然取决于控件的内容,它是否可扩展等等。

    例如

    在下面的示例中,我在导出对话框中使用了一个名为 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-10
      • 2014-06-13
      • 2015-09-19
      • 2019-02-02
      • 2019-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多