【问题标题】:When creating an bitmap image from scratch in VB.Net, the quality stinks?在 VB.Net 中从头开始创建位图图像时,质量很差?
【发布时间】:2025-11-26 14:00:01
【问题描述】:

Vb.Net 应用程序从头开始创建位图并将其转换为 tiff 或将其发送到打印机。在这两种情况下,图像的质量(在这种情况下是字体)都不好。下面列出的示例代码创建了我用来写入图像的图形对象。

Dim gr2 As Graphics = Graphics.FromImage(New Bitmap(800, 1000), Imaging.PixelFormat.Format32bppPArgb))

【问题讨论】:

  • 只是生成的 tiff 看起来不好,还是你的位图(bmp)也有同样的问题?
  • 是的,无论我创建哪种类型——bmp、tiff、jpg 等,质量都很糟糕。

标签: vb.net image bitmap tiff


【解决方案1】:

除了@durilai 所说的,如果您要打印,您可能希望提高分辨率。 .Net 使用的系统分辨率通常为 96 DPI,但打印机可以处理 300 DPI 或更高的文件。

    'Create a new bitmap
    Using Bmp As New Bitmap(800, 1000, Imaging.PixelFormat.Format32bppPArgb)
        'Set the resolution to 300 DPI
        Bmp.SetResolution(300, 300)
        'Create a graphics object from the bitmap
        Using G = Graphics.FromImage(Bmp)
            'Paint the canvas white
            G.Clear(Color.White)
            'Set various modes to higher quality
            G.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
            G.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
            G.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias

            'Create a font
            Using F As New Font("Arial", 12)
                'Create a brush
                Using B As New SolidBrush(Color.Black)
                    'Draw some text
                    G.DrawString("Hello world", F, B, 20, 20)
                End Using
            End Using
        End Using

        'Save the file as a TIFF
        Bmp.Save("c:\test.tiff", Imaging.ImageFormat.Tiff)
    End Using

【讨论】:

  • 所以看起来越来越好,但仍然不是最好的。例如,当我排列 2 个打印的文档(一个位图和一个单词文档)时,位图看起来像是从旧的点阵打印机打印出来的——每个字符都是由小点组成的。还有其他建议吗?
  • 使用标准 tiff 查看器打印时,质量正常。查看图像并放大时,您会发现字体看起来很差。我真的在尝试获得 word 文档质量的文本。
  • 好的,我只是想确保我们在同一页面上。您是在谈论如何在 Word 中随心所欲地增加缩放级别并始终以干净的字体结束?但是,如果您在 .Net 中制作图像并对其进行缩放,它看起来会像素化吗?如果是这样,这是因为您从定义为基于像素的 Bitmap 对象开始。当您绘制文本时,.Net 必须将字体“光栅化”为像素。 TIFF、JPG 和大多数图像格式都是光栅格式,您需要查看基于矢量的内容。您可能想探索 WPF 或使用 iTextSharp 之类的东西编写 PDF。
  • 我已经尝试过从 word 打印到 blackice tiff 驱动程序。我想这将更多是驱动程序的功能而不是文字,但质量比我从创建.Net 位图和转换为 tiff 获得的任何东西都要好。我无法使用驱动程序,因为打印过程太慢,但我无法匹配它们的质量。此线程上的建议极大地提高了质量,但仍然没有。
  • 我刚刚做了一个测试,使用了 Black Ice 的最高设置(TIFF 未压缩,24 位,高分辨率 600x600,8 1/2x11),然后通过将位图大小更改为 5100x6000 来更新上面的代码分辨率为 600x600(与 Black Ice 产生的相同),它们看起来几乎相同。我可以看到 Word 到 TIFF 确实包含一些 LCD ClearType 像素(橙色阴影),这些像素实际上是用于屏幕而不是打印的,但除此之外它们看起来也几乎相同,尤其是在打印时。这是每个放大 700% 的屏幕截图:chris.vendiadvertising.com/Tiff.png
【解决方案2】:

我使用了这些方法,尝试使用它们会产生巨大的影响。这些是 C#,但您可以看到需要什么。对不起。

  Bitmap bm = new Bitmap(iWidth, iHeight);
  using (Graphics graphics = Graphics.FromImage(bm))
  {
    graphics.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
    graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
    graphics.DrawImage(bmOriginal, 0, 0, iWidth, iHeight);
  }

我对字体使用了这些方法:

  graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighSpeed;
  graphics.TextRenderingHint = TextRenderingHint.AntiAlias;

【讨论】:

  • 稍微好一点,但弯曲的字体看起来还是很糟糕。
  • 检查我的补充,我没有看到你在做字体。
  • 与上面的评论相同 - 所以它看起来越来越好,但它仍然不是最好的。例如,当我排列 2 个打印的文档(一个位图和一个单词文档)时,位图看起来像是从旧的点阵打印机打印出来的——每个字符都是由小点组成的。还有其他建议吗?